Skip to content

Commit c2c3d6e

Browse files
committed
Added specs for GroupFilterValidator class.
1 parent a7bdce8 commit c2c3d6e

File tree

3 files changed

+146
-0
lines changed

3 files changed

+146
-0
lines changed

lib/graphiti/scoping/filter_group_validator.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ def raise_unless_filter_group_requirements_met!
2121
VALID_FILTER_GROUP_REQUIRED_VALUES
2222
)
2323
end
24+
25+
true
2426
end
2527

2628
private
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
require "spec_helper"
2+
3+
RSpec.describe Graphiti::Scoping::FilterGroupValidator do
4+
let(:resource) { double(:resource) }
5+
let(:query_hash) { {} }
6+
let(:validator) { described_class.new(resource, query_hash) }
7+
8+
subject { validator.raise_unless_filter_group_requirements_met! }
9+
10+
describe '#raise_unless_filter_group_requirements_met!' do
11+
before do
12+
allow(resource).to receive(:grouped_filters).and_return(grouped_filters)
13+
end
14+
15+
context "when required invalid" do
16+
let(:query_hash) do
17+
{
18+
filter: {
19+
first_name: {},
20+
last_name: {}
21+
}
22+
}
23+
end
24+
25+
let(:grouped_filters) do
26+
{
27+
names: [:first_name, :last_name],
28+
required: :foo
29+
}
30+
end
31+
32+
it "raises an error" do
33+
expect {
34+
subject
35+
}.to raise_error(/The filter group required: value on resource .+ must be one of the following:/)
36+
end
37+
end
38+
39+
context "when all are required" do
40+
let(:grouped_filters) do
41+
{
42+
names: [:first_name, :last_name],
43+
required: :all
44+
}
45+
end
46+
47+
context "when all are not given in the request" do
48+
let(:query_hash) do
49+
{
50+
filter: {
51+
first_name: {},
52+
}
53+
}
54+
end
55+
56+
it "raises an error" do
57+
expect {
58+
subject
59+
}.to raise_error(/All of the following filters must be provided on resource/)
60+
end
61+
end
62+
63+
context "when all are given in the request" do
64+
let(:query_hash) do
65+
{
66+
filter: {
67+
first_name: {},
68+
last_name: {}
69+
}
70+
}
71+
end
72+
73+
it "works" do
74+
expect(subject).to be false
75+
end
76+
end
77+
end
78+
79+
context "when any are required" do
80+
let(:grouped_filters) do
81+
{
82+
names: [:first_name, :last_name],
83+
required: :any
84+
}
85+
end
86+
87+
context "when none are given in the request" do
88+
let(:query_hash) do
89+
{
90+
filter: {}
91+
}
92+
end
93+
94+
it "raises an error" do
95+
expect {
96+
subject
97+
}.to raise_error(/One of the following filters must be provided on resource/)
98+
end
99+
end
100+
101+
context "when one is given in the request" do
102+
let(:query_hash) do
103+
{
104+
filter: {
105+
last_name: {}
106+
}
107+
}
108+
end
109+
110+
it "works" do
111+
expect(subject).to be true
112+
end
113+
end
114+
115+
context "when all are given in the request" do
116+
let(:query_hash) do
117+
{
118+
filter: {
119+
first_name: {},
120+
last_name: {}
121+
}
122+
}
123+
end
124+
125+
it "works" do
126+
expect(subject).to be true
127+
end
128+
end
129+
end
130+
end
131+
end

spec/filtering_spec.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1850,6 +1850,19 @@ def after_filtering(scope)
18501850
expect(records.map(&:id)).to eq([employee2.id])
18511851
end
18521852
end
1853+
1854+
context "when all are given in the request" do
1855+
before do
1856+
params[:filter] = {
1857+
first_name: "Agatha",
1858+
last_name: "Christie"
1859+
}
1860+
end
1861+
1862+
it "works" do
1863+
expect(records.map(&:id)).to eq([employee2.id])
1864+
end
1865+
end
18531866
end
18541867
end
18551868
end

0 commit comments

Comments
 (0)