spec/graphql/relay/relation_connection_spec.rb in graphql-relay-0.10.0 vs spec/graphql/relay/relation_connection_spec.rb in graphql-relay-0.11.0
- old
+ new
@@ -18,11 +18,11 @@
... basesConnection
}
}
}
- fragment basesConnection on BaseConnection {
+ fragment basesConnection on BasesConnectionWithTotalCount {
totalCount,
edges {
cursor
node {
name
@@ -158,33 +158,128 @@
describe "custom ordering" do
let(:query_string) {%|
query getBases {
empire {
basesByName(first: 30) { ... basesFields }
- bases(first: 30) { ... basesFields }
+ bases(first: 30) { ... basesFields2 }
}
}
fragment basesFields on BaseConnection {
edges {
node {
name
}
}
}
+ fragment basesFields2 on BasesConnectionWithTotalCount {
+ edges {
+ node {
+ name
+ }
+ }
+ }
|}
def get_names(result, field_name)
bases = result["data"]["empire"][field_name]["edges"]
base_names = bases.map { |b| b["node"]["name"] }
end
it "applies the default value" do
result = query(query_string)
-
bases_by_id = ["Death Star", "Shield Generator", "Headquarters"]
bases_by_name = ["Death Star", "Headquarters", "Shield Generator"]
assert_equal(bases_by_id, get_names(result, "bases"))
assert_equal(bases_by_name, get_names(result, "basesByName"))
+ end
+ end
+
+ describe "with a Sequel::Dataset" do
+ def get_names(result)
+ ships = result["data"]["empire"]["basesAsSequelDataset"]["edges"]
+ names = ships.map { |e| e["node"]["name"] }
+ end
+
+ def get_last_cursor(result)
+ result["data"]["empire"]["basesAsSequelDataset"]["edges"].last["cursor"]
+ end
+
+ describe "results" do
+ let(:query_string) {%|
+ query getShips($first: Int, $after: String, $last: Int, $before: String, $nameIncludes: String){
+ empire {
+ basesAsSequelDataset(first: $first, after: $after, last: $last, before: $before, nameIncludes: $nameIncludes) {
+ ... basesConnection
+ }
+ }
+ }
+
+ fragment basesConnection on BasesConnectionWithTotalCount {
+ totalCount,
+ edges {
+ cursor
+ node {
+ name
+ }
+ },
+ pageInfo {
+ hasNextPage
+ }
+ }
+ |}
+
+ it 'limits the result' do
+ result = query(query_string, "first" => 2)
+ assert_equal(2, get_names(result).length)
+
+ result = query(query_string, "first" => 3)
+ assert_equal(3, get_names(result).length)
+ end
+
+ it 'provides custom fileds on the connection type' do
+ result = query(query_string, "first" => 2)
+ assert_equal(
+ Base.where(faction_id: 2).count,
+ result["data"]["empire"]["basesAsSequelDataset"]["totalCount"]
+ )
+ end
+
+ it 'slices the result' do
+ result = query(query_string, "first" => 2)
+ assert_equal(["Death Star", "Shield Generator"], get_names(result))
+
+ # After the last result, find the next 2:
+ last_cursor = get_last_cursor(result)
+
+ result = query(query_string, "after" => last_cursor, "first" => 2)
+ assert_equal(["Headquarters"], get_names(result))
+
+ last_cursor = get_last_cursor(result)
+
+ result = query(query_string, "before" => last_cursor, "last" => 1)
+ assert_equal(["Shield Generator"], get_names(result))
+
+ result = query(query_string, "before" => last_cursor, "last" => 2)
+ assert_equal(["Death Star", "Shield Generator"], get_names(result))
+
+ result = query(query_string, "before" => last_cursor, "last" => 10)
+ assert_equal(["Death Star", "Shield Generator"], get_names(result))
+
+ end
+
+ it "applies custom arguments" do
+ result = query(query_string, "first" => 1, "nameIncludes" => "ea")
+ assert_equal(["Death Star"], get_names(result))
+
+ after = get_last_cursor(result)
+
+ result = query(query_string, "first" => 2, "nameIncludes" => "ea", "after" => after )
+ assert_equal(["Headquarters"], get_names(result))
+ before = get_last_cursor(result)
+
+ result = query(query_string, "last" => 1, "nameIncludes" => "ea", "before" => before)
+ assert_equal(["Death Star"], get_names(result))
+ end
end
end
end