Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 25 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,30 @@
/_build
/cover
/deps
/doc
# The directory Mix will write compiled artifacts to.
/_build/

# If you run "mix test --cover", coverage assets end up here.
/cover/

# The directory Mix downloads your dependencies sources to.
/deps/

# Where third-party dependencies like ExDoc output generated docs.
/doc/

# Ignore .fetch files in case you like to edit your project deps locally.
/.fetch

# If the VM crashes, it generates a dump, let's ignore it too.
erl_crash.dump

# Also ignore archive artifacts (built via "mix archive.build").
*.ez

# Ignore package tarball (built via "mix hex.build").
assertions-*.tar

# Temporary files for e.g. tests.
/tmp/

# Misc.
*.beam
/config/*.secret.exs
79 changes: 44 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
# Assertions [![Hex Version](https://img.shields.io/hexpm/v/assertions.svg)](https://hex.pm/packages/assertions) [![Build Status](https://travis-ci.org/devonestes/assertions.svg?branch=master)](https://travis-ci.org/devonestes/assertions)
# Assertions

[![Build Status](https://travis-ci.org/devonestes/assertions.svg?branch=master)](https://travis-ci.org/devonestes/assertions)
[![Module Version](https://img.shields.io/hexpm/v/assertions.svg)](https://hex.pm/packages/assertions)
[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/assertions/)
[![Total Download](https://img.shields.io/hexpm/dt/assertions.svg)](https://hex.pm/packages/assertions)
[![License](https://img.shields.io/hexpm/l/assertions.svg)](https://github.com/devonestes/assertions/blob/master/LICENSE)
[![Last Updated](https://img.shields.io/github/last-commit/devonestes/assertions.svg)](https://github.com/devonestes/assertions/commits/master)

## Installation

Add `assertions` to your list of dependencies in `mix.exs`:
Add `:assertions` to your list of dependencies in `mix.exs`:

```elixir
def deps do
[{:assertions, "~> 0.10", only: :test}]
[
{:assertions, "~> 0.10", only: :test}
]
end
```

Expand Down Expand Up @@ -92,7 +101,7 @@ defmodule UsersTest do
alice = Factory.insert(:user, name: "Alice")
bob = Factory.insert(:user, name: "Bob")

updated_names =
updated_names =
[{alice, %{name: "Alice A."}, {bob, %{name: "Bob B."}}}]
|> Users.update_all()
|> Enum.map(& &1.name)
Expand Down Expand Up @@ -190,22 +199,22 @@ end

The output you get from that failure looks like this:

```
Expected truthy, got false
code: assert Enum.any?(list, fn map_in_list -> Map.get(map_in_list, :key) == map.key() end)
arguments:
```elixir
Expected truthy, got false
code: assert Enum.any?(list, fn map_in_list -> Map.get(map_in_list, :key) == map.key() end)
arguments:

# 1
[
%{big: :map, of: :keys, with: :lots},
%{another: :big, key: :values, store: :with}
]
# 1
[
%{big: :map, of: :keys, with: :lots},
%{another: :big, key: :values, store: :with}
]

# 2
#Function<21.25555998/1 in Assertions.FailureExamples."test example"/1>
# 2
#Function<21.25555998/1 in Assertions.FailureExamples."test example"/1>

stacktrace:
test/failure_examples.exs:207: (test)
stacktrace:
test/failure_examples.exs:207: (test)
```

That's not really helpful. What we wanted to know was essentially "is a map with
Expand All @@ -227,24 +236,24 @@ end

And then the output looks like this:

```
Map matching the values for keys `:key` not found
code: assert_map_in_list(map, list, [:key])
arguments:

# 1
%{key: :value, really: :helpful, stores: :are}

# 2
[
%{big: :map, of: :keys, with: :lots},
%{another: :big, key: :values, store: :with}
]

left: %{key: :value}
right: [%{}, %{key: :values}]
stacktrace:
test/failure_examples.exs:206: (test)
```elixir
Map matching the values for keys `:key` not found
code: assert_map_in_list(map, list, [:key])
arguments:

# 1
%{key: :value, really: :helpful, stores: :are}

# 2
[
%{big: :map, of: :keys, with: :lots},
%{another: :big, key: :values, store: :with}
]

left: %{key: :value}
right: [%{}, %{key: :values}]
stacktrace:
test/failure_examples.exs:206: (test)
```

The error message there in the `left` and `right` keys shrinks down the output
Expand Down
25 changes: 17 additions & 8 deletions mix.exs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
defmodule Assertions.MixProject do
use Mix.Project

@source_url "https://github.com/devonestes/assertions"

def project do
[
app: :assertions,
Expand All @@ -10,11 +12,7 @@ defmodule Assertions.MixProject do
description: description(),
package: package(),
name: "Assertions",
source_url: "https://github.com/devonestes/assertions",
docs: [
main: "Assertions",
extras: ["README.md"]
]
docs: docs()
]
end

Expand All @@ -29,17 +27,28 @@ defmodule Assertions.MixProject do

defp package do
[
files: ~w(lib mix.exs README.md LICENSE .formatter.exs),
files: ~w(lib mix.exs CHANGELOG.md README.md LICENSE .formatter.exs),
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/devonestes/assertions"}
links: %{
"Changelog" => "https://hexdocs.pm/assertions/changelog.html",
"GitHub" => @source_url
}
]
end

defp deps() do
[
{:ex_doc, "~> 0.19", only: [:dev, :test], runtime: false},
{:ex_doc, ">= 0.0.0", only: [:dev, :test], runtime: false},
{:ecto, "~> 3.3", only: [:dev, :test], runtime: false},
{:absinthe, "~> 1.5.0-rc.5", only: [:dev, :test], runtime: false}
]
end

defp docs do
[
extras: ["CHANGELOG.md", "README.md"],
main: "readme",
source_url: @source_url
]
end
end
9 changes: 5 additions & 4 deletions mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
"absinthe": {:hex, :absinthe, "1.5.0-rc.5", "90b6335d452bfe72532257bb60c54793f6b8c4992b35b6861dc9adea5d01f463", [:mix], [{:dataloader, "~> 1.0.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7caf5b2d7d4be5a401dc4a17d219d44650af5dce4fe635687ca543c1823047a6"},
"decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"},
"earmark": {:hex, :earmark, "1.3.1", "73812f447f7a42358d3ba79283cfa3075a7580a3a2ed457616d6517ac3738cb9", [:mix], [], "hexpm", "000aaeff08919e95e7aea13e4af7b2b9734577b3e6a7c50ee31ee88cab6ec4fb"},
"earmark_parser": {:hex, :earmark_parser, "1.4.12", "b245e875ec0a311a342320da0551da407d9d2b65d98f7a9597ae078615af3449", [:mix], [], "hexpm", "711e2cc4d64abb7d566d43f54b78f7dc129308a63bc103fbd88550d2174b3160"},
"ecto": {:hex, :ecto, "3.3.1", "82ab74298065bf0c64ca299f6c6785e68ea5d6b980883ee80b044499df35aba1", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "e6c614dfe3bcff2d575ce16d815dbd43f4ee1844599a83de1eea81976a31c174"},
"ex_doc": {:hex, :ex_doc, "0.19.2", "6f4081ccd9ed081b6dc0bd5af97a41e87f5554de469e7d76025fba535180565f", [:mix], [{:earmark, "~> 1.2", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.10", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "4eae888633d2937e0a8839ae6002536d459c22976743c9dc98dd05941a06c016"},
"ex_doc": {:hex, :ex_doc, "0.23.0", "a069bc9b0bf8efe323ecde8c0d62afc13d308b1fa3d228b65bca5cf8703a529d", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f5e2c4702468b2fd11b10d39416ddadd2fcdd173ba2a0285ebd92c39827a5a16"},
"jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
"makeup": {:hex, :makeup, "0.8.0", "9cf32aea71c7fe0a4b2e9246c2c4978f9070257e5c9ce6d4a28ec450a839b55f", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5fbc8e549aa9afeea2847c0769e3970537ed302f93a23ac612602e805d9d1e7f"},
"makeup_elixir": {:hex, :makeup_elixir, "0.13.0", "be7a477997dcac2e48a9d695ec730b2d22418292675c75aa2d34ba0909dcdeda", [:mix], [{:makeup, "~> 0.8", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "adf0218695e22caeda2820eaba703fa46c91820d53813a2223413da3ef4ba515"},
"makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"},
"makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"},
"mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm"},
"nimble_parsec": {:hex, :nimble_parsec, "0.5.0", "90e2eca3d0266e5c53f8fbe0079694740b9c91b6747f2b7e3c5d21966bba8300", [:mix], [], "hexpm", "5c040b8469c1ff1b10093d3186e2e10dbe483cd73d79ec017993fb3985b8a9b3"},
"nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"},
"telemetry": {:hex, :telemetry, "0.4.1", "ae2718484892448a24470e6aa341bc847c3277bfb8d4e9289f7474d752c09c7f", [:rebar3], [], "hexpm", "4738382e36a0a9a2b6e25d67c960e40e1a2c95560b9f936d8e29de8cd858480f"},
"tesla": {:hex, :tesla, "1.2.1", "864783cc27f71dd8c8969163704752476cec0f3a51eb3b06393b3971dc9733ff", [:mix], [{:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm"},
"testmetrics_elixir_client": {:hex, :testmetrics_elixir_client, "1.1.0", "85b80aed72f538bb0421af83fd65fd4b638f7730426145dfa9b5e17040309a18", [:mix], [{:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: false]}, {:tesla, ">= 1.1.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm"},
Expand Down