summaryrefslogtreecommitdiff
path: root/spec/graphql/resolvers/todo_resolver_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/graphql/resolvers/todo_resolver_spec.rb')
-rw-r--r--spec/graphql/resolvers/todo_resolver_spec.rb88
1 files changed, 46 insertions, 42 deletions
diff --git a/spec/graphql/resolvers/todo_resolver_spec.rb b/spec/graphql/resolvers/todo_resolver_spec.rb
index fef761d7243..5a09ec40e64 100644
--- a/spec/graphql/resolvers/todo_resolver_spec.rb
+++ b/spec/graphql/resolvers/todo_resolver_spec.rb
@@ -7,13 +7,12 @@ describe Resolvers::TodoResolver do
describe '#resolve' do
let_it_be(:current_user) { create(:user) }
- let_it_be(:user) { create(:user) }
let_it_be(:author1) { create(:user) }
let_it_be(:author2) { create(:user) }
- let_it_be(:todo1) { create(:todo, user: user, target_type: 'MergeRequest', state: :pending, action: Todo::MENTIONED, author: author1) }
- let_it_be(:todo2) { create(:todo, user: user, state: :done, action: Todo::ASSIGNED, author: author2) }
- let_it_be(:todo3) { create(:todo, user: user, state: :pending, action: Todo::ASSIGNED, author: author1) }
+ let_it_be(:todo1) { create(:todo, user: current_user, target_type: 'MergeRequest', state: :pending, action: Todo::MENTIONED, author: author1) }
+ let_it_be(:todo2) { create(:todo, user: current_user, state: :done, action: Todo::ASSIGNED, author: author2) }
+ let_it_be(:todo3) { create(:todo, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author1) }
it 'calls TodosFinder' do
expect_next_instance_of(TodosFinder) do |finder|
@@ -25,68 +24,71 @@ describe Resolvers::TodoResolver do
context 'when using no filter' do
it 'returns expected todos' do
- todos = resolve(described_class, obj: user, args: {}, ctx: { current_user: user })
-
- expect(todos).to contain_exactly(todo1, todo3)
+ expect(resolve_todos).to contain_exactly(todo1, todo3)
end
end
context 'when using filters' do
- # TODO These can be removed as soon as we support filtering for multiple field contents for todos
-
- it 'just uses the first state' do
- todos = resolve(described_class, obj: user, args: { state: [:done, :pending] }, ctx: { current_user: user })
+ it 'returns the todos for multiple states' do
+ todos = resolve_todos({ state: [:done, :pending] })
- expect(todos).to contain_exactly(todo2)
+ expect(todos).to contain_exactly(todo1, todo2, todo3)
end
- it 'just uses the first action' do
- todos = resolve(described_class, obj: user, args: { action: [Todo::MENTIONED, Todo::ASSIGNED] }, ctx: { current_user: user })
+ it 'returns the todos for multiple types' do
+ todos = resolve_todos({ type: %w[Issue MergeRequest] })
- expect(todos).to contain_exactly(todo1)
+ expect(todos).to contain_exactly(todo1, todo3)
end
- it 'just uses the first author id' do
- # We need a pending todo for now because of TodosFinder's state query
- todo4 = create(:todo, user: user, state: :pending, action: Todo::ASSIGNED, author: author2)
+ it 'returns the todos for multiple groups' do
+ group1 = create(:group)
+ group2 = create(:group)
+ group3 = create(:group)
+
+ group1.add_developer(current_user)
+ group2.add_developer(current_user)
- todos = resolve(described_class, obj: user, args: { author_id: [author2.id, author1.id] }, ctx: { current_user: user })
+ todo4 = create(:todo, group: group1, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ todo5 = create(:todo, group: group2, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ create(:todo, group: group3, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author1)
- expect(todos).to contain_exactly(todo4)
+ todos = resolve_todos({ group_id: [group2.id, group1.id] })
+
+ expect(todos).to contain_exactly(todo4, todo5)
end
- it 'just uses the first project id' do
- project1 = create(:project)
- project2 = create(:project)
+ it 'returns the todos for multiple authors' do
+ author3 = create(:user)
- create(:todo, project: project1, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
- todo5 = create(:todo, project: project2, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ todo4 = create(:todo, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author2)
+ create(:todo, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author3)
- todos = resolve(described_class, obj: user, args: { project_id: [project2.id, project1.id] }, ctx: { current_user: user })
+ todos = resolve_todos({ author_id: [author2.id, author1.id] })
- expect(todos).to contain_exactly(todo5)
+ expect(todos).to contain_exactly(todo1, todo3, todo4)
end
- it 'just uses the first group id' do
- group1 = create(:group)
- group2 = create(:group)
+ it 'returns the todos for multiple actions' do
+ create(:todo, user: current_user, state: :pending, action: Todo::DIRECTLY_ADDRESSED, author: author1)
- group1.add_developer(user)
- group2.add_developer(user)
+ todos = resolve_todos({ action: [Todo::MENTIONED, Todo::ASSIGNED] })
- create(:todo, group: group1, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
- todo5 = create(:todo, group: group2, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ expect(todos).to contain_exactly(todo1, todo3)
+ end
- todos = resolve(described_class, obj: user, args: { group_id: [group2.id, group1.id] }, ctx: { current_user: user })
+ it 'returns the todos for multiple projects' do
+ project1 = create(:project)
+ project2 = create(:project)
+ project3 = create(:project)
- expect(todos).to contain_exactly(todo5)
- end
+ todo4 = create(:todo, project: project1, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ todo5 = create(:todo, project: project2, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ create(:todo, project: project3, user: current_user, state: :pending, action: Todo::ASSIGNED, author: author1)
- it 'just uses the first target' do
- todos = resolve(described_class, obj: user, args: { type: %w[Issue MergeRequest] }, ctx: { current_user: user })
+ todos = resolve_todos({ project_id: [project2.id, project1.id] })
- # Just todo3 because todo2 is in state "done"
- expect(todos).to contain_exactly(todo3)
+ expect(todos).to contain_exactly(todo4, todo5)
end
end
@@ -100,7 +102,9 @@ describe Resolvers::TodoResolver do
context 'when provided user is not current user' do
it 'returns no todos' do
- todos = resolve(described_class, obj: user, args: {}, ctx: { current_user: current_user })
+ other_user = create(:user)
+
+ todos = resolve(described_class, obj: other_user, args: {}, ctx: { current_user: current_user })
expect(todos).to be_empty
end