Skip to content

Commit e875712

Browse files
committed
Add GraphQL resolver tests
1 parent a073082 commit e875712

6 files changed

Lines changed: 260 additions & 0 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
defmodule SWAPIWeb.GraphQL.Resolvers.FilmResolverTest do
2+
use SWAPI.DataCase
3+
4+
alias SWAPIWeb.GraphQL.Resolvers.FilmResolver
5+
import SWAPI.FilmsFixtures
6+
7+
describe "all/2" do
8+
test "returns all films" do
9+
%{id: film_id} = film_fixture()
10+
assert {:ok, [%{id: ^film_id}]} = FilmResolver.all(%{}, %{})
11+
end
12+
13+
test "returns empty list when no films exist" do
14+
assert {:ok, []} = FilmResolver.all(%{}, %{})
15+
end
16+
end
17+
18+
describe "one/2" do
19+
test "returns film when it exists" do
20+
%{id: film_id} = film_fixture()
21+
assert {:ok, %{id: ^film_id}} = FilmResolver.one(%{id: film_id}, %{})
22+
end
23+
24+
test "returns error when film doesn't exist" do
25+
assert {:error, "Film not found"} = FilmResolver.one(%{id: 0}, %{})
26+
end
27+
end
28+
29+
describe "search/2" do
30+
test "returns matching films" do
31+
%{id: film_id} = film_fixture(%{title: "A New Hope"})
32+
film_fixture(%{title: "Empire Strikes Back"})
33+
34+
assert {:ok, [%{id: ^film_id}]} = FilmResolver.search(%{search_terms: ["Hope"]}, %{})
35+
end
36+
37+
test "returns empty list when no matches found" do
38+
film_fixture(%{title: "A New Hope"})
39+
40+
assert {:ok, []} = FilmResolver.search(%{search_terms: ["Non-existent"]}, %{})
41+
end
42+
end
43+
end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
defmodule SWAPIWeb.GraphQL.Resolvers.PersonResolverTest do
2+
use SWAPI.DataCase
3+
4+
alias SWAPIWeb.GraphQL.Resolvers.PersonResolver
5+
import SWAPI.PeopleFixtures
6+
7+
describe "all/2" do
8+
test "returns all people" do
9+
%{id: person_id} = person_fixture()
10+
assert {:ok, [%{id: ^person_id}]} = PersonResolver.all(%{}, %{})
11+
end
12+
13+
test "returns empty list when no people exist" do
14+
assert {:ok, []} = PersonResolver.all(%{}, %{})
15+
end
16+
end
17+
18+
describe "one/2" do
19+
test "returns person when they exist" do
20+
%{id: person_id} = person_fixture()
21+
assert {:ok, %{id: ^person_id}} = PersonResolver.one(%{id: person_id}, %{})
22+
end
23+
24+
test "returns error when person doesn't exist" do
25+
assert {:error, "Person not found"} = PersonResolver.one(%{id: 0}, %{})
26+
end
27+
end
28+
29+
describe "search/2" do
30+
test "returns matching people" do
31+
%{id: person_id} = person_fixture(%{name: "Luke Skywalker"})
32+
person_fixture(%{name: "Leia Organa"})
33+
34+
assert {:ok, [%{id: ^person_id}]} = PersonResolver.search(%{search_terms: ["Luke"]}, %{})
35+
end
36+
37+
test "returns empty list when no matches found" do
38+
person_fixture(%{name: "Luke Skywalker"})
39+
40+
assert {:ok, []} = PersonResolver.search(%{search_terms: ["Non-existent"]}, %{})
41+
end
42+
end
43+
end
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
defmodule SWAPIWeb.GraphQL.Resolvers.PlanetResolverTest do
2+
use SWAPI.DataCase
3+
4+
alias SWAPIWeb.GraphQL.Resolvers.PlanetResolver
5+
import SWAPI.PlanetsFixtures
6+
7+
describe "all/2" do
8+
test "returns all planets" do
9+
%{id: planet_id} = planet_fixture()
10+
assert {:ok, [%{id: ^planet_id}]} = PlanetResolver.all(%{}, %{})
11+
end
12+
13+
test "returns empty list when no planets exist" do
14+
assert {:ok, []} = PlanetResolver.all(%{}, %{})
15+
end
16+
end
17+
18+
describe "one/2" do
19+
test "returns planet when it exists" do
20+
%{id: planet_id} = planet_fixture()
21+
assert {:ok, %{id: ^planet_id}} = PlanetResolver.one(%{id: planet_id}, %{})
22+
end
23+
24+
test "returns error when planet doesn't exist" do
25+
assert {:error, "Planet not found"} = PlanetResolver.one(%{id: 0}, %{})
26+
end
27+
end
28+
29+
describe "search/2" do
30+
test "returns matching planets" do
31+
%{id: planet_id} = planet_fixture(%{name: "Tatooine"})
32+
planet_fixture(%{name: "Alderaan"})
33+
34+
assert {:ok, [%{id: ^planet_id}]} =
35+
PlanetResolver.search(%{search_terms: ["Tatooine"]}, %{})
36+
end
37+
38+
test "returns empty list when no matches found" do
39+
planet_fixture(%{name: "Tatooine"})
40+
41+
assert {:ok, []} = PlanetResolver.search(%{search_terms: ["Non-existent"]}, %{})
42+
end
43+
end
44+
end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
defmodule SWAPIWeb.GraphQL.Resolvers.SpeciesResolverTest do
2+
use SWAPI.DataCase
3+
4+
alias SWAPIWeb.GraphQL.Resolvers.SpeciesResolver
5+
import SWAPI.SpeciesFixtures
6+
7+
describe "all/2" do
8+
test "returns all species" do
9+
%{id: species_id} = species_fixture()
10+
assert {:ok, [%{id: ^species_id}]} = SpeciesResolver.all(%{}, %{})
11+
end
12+
13+
test "returns empty list when no species exist" do
14+
assert {:ok, []} = SpeciesResolver.all(%{}, %{})
15+
end
16+
end
17+
18+
describe "one/2" do
19+
test "returns species when it exists" do
20+
%{id: species_id} = species_fixture()
21+
assert {:ok, %{id: ^species_id}} = SpeciesResolver.one(%{id: species_id}, %{})
22+
end
23+
24+
test "returns error when species doesn't exist" do
25+
assert {:error, "Species not found"} = SpeciesResolver.one(%{id: 0}, %{})
26+
end
27+
end
28+
29+
describe "search/2" do
30+
test "returns matching species" do
31+
%{id: species_id} = species_fixture(%{name: "Human"})
32+
species_fixture(%{name: "Wookiee"})
33+
34+
assert {:ok, [%{id: ^species_id}]} = SpeciesResolver.search(%{search_terms: ["Human"]}, %{})
35+
end
36+
37+
test "returns empty list when no matches found" do
38+
species_fixture(%{name: "Human"})
39+
40+
assert {:ok, []} = SpeciesResolver.search(%{search_terms: ["Non-existent"]}, %{})
41+
end
42+
end
43+
end
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
defmodule SWAPIWeb.GraphQL.Resolvers.StarshipResolverTest do
2+
use SWAPI.DataCase
3+
4+
alias SWAPIWeb.GraphQL.Resolvers.StarshipResolver
5+
import SWAPI.StarshipsFixtures
6+
7+
describe "all/2" do
8+
test "returns all starships" do
9+
%{id: starship_id} = starship_fixture()
10+
assert {:ok, [%{id: ^starship_id}]} = StarshipResolver.all(%{}, %{})
11+
end
12+
13+
test "returns empty list when no starships exist" do
14+
assert {:ok, []} = StarshipResolver.all(%{}, %{})
15+
end
16+
end
17+
18+
describe "one/2" do
19+
test "returns starship when it exists" do
20+
%{id: starship_id} = starship_fixture()
21+
assert {:ok, %{id: ^starship_id}} = StarshipResolver.one(%{id: starship_id}, %{})
22+
end
23+
24+
test "returns error when starship doesn't exist" do
25+
assert {:error, "Starship not found"} = StarshipResolver.one(%{id: 0}, %{})
26+
end
27+
end
28+
29+
describe "search/2" do
30+
test "returns matching starships" do
31+
%{id: starship_id} = starship_fixture(%{transport: %{name: "X-wing"}})
32+
starship_fixture(%{transport: %{name: "TIE Fighter"}})
33+
34+
assert {:ok, [%{id: ^starship_id}]} =
35+
StarshipResolver.search(%{search_terms: ["X-wing"]}, %{})
36+
end
37+
38+
test "returns empty list when no matches found" do
39+
starship_fixture(%{transport: %{name: "X-wing"}})
40+
41+
assert {:ok, []} = StarshipResolver.search(%{search_terms: ["Non-existent"]}, %{})
42+
end
43+
end
44+
end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
defmodule SWAPIWeb.GraphQL.Resolvers.VehicleResolverTest do
2+
use SWAPI.DataCase
3+
4+
alias SWAPIWeb.GraphQL.Resolvers.VehicleResolver
5+
import SWAPI.VehiclesFixtures
6+
7+
describe "all/2" do
8+
test "returns all vehicles" do
9+
%{id: vehicle_id} = vehicle_fixture()
10+
assert {:ok, [%{id: ^vehicle_id}]} = VehicleResolver.all(%{}, %{})
11+
end
12+
13+
test "returns empty list when no vehicles exist" do
14+
assert {:ok, []} = VehicleResolver.all(%{}, %{})
15+
end
16+
end
17+
18+
describe "one/2" do
19+
test "returns vehicle when it exists" do
20+
%{id: vehicle_id} = vehicle_fixture()
21+
assert {:ok, %{id: ^vehicle_id}} = VehicleResolver.one(%{id: vehicle_id}, %{})
22+
end
23+
24+
test "returns error when vehicle doesn't exist" do
25+
assert {:error, "Vehicle not found"} = VehicleResolver.one(%{id: 0}, %{})
26+
end
27+
end
28+
29+
describe "search/2" do
30+
test "returns matching vehicles" do
31+
%{id: vehicle_id} = vehicle_fixture(%{transport: %{name: "AT-AT"}})
32+
vehicle_fixture(%{name: "Snowspeeder"})
33+
34+
assert {:ok, [%{id: ^vehicle_id}]} = VehicleResolver.search(%{search_terms: ["AT-AT"]}, %{})
35+
end
36+
37+
test "returns empty list when no matches found" do
38+
vehicle_fixture(%{transport: %{name: "AT-AT"}})
39+
40+
assert {:ok, []} = VehicleResolver.search(%{search_terms: ["Non-existent"]}, %{})
41+
end
42+
end
43+
end

0 commit comments

Comments
 (0)