1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe Mutations::Todos::MarkAllDone do 6 include GraphqlHelpers 7 8 let_it_be(:current_user) { create(:user) } 9 let_it_be(:author) { create(:user) } 10 let_it_be(:other_user) { create(:user) } 11 12 let_it_be(:todo1) { create(:todo, user: current_user, author: author, state: :pending) } 13 let_it_be(:todo2) { create(:todo, user: current_user, author: author, state: :done) } 14 let_it_be(:todo3) { create(:todo, user: current_user, author: author, state: :pending) } 15 16 let_it_be(:other_user_todo) { create(:todo, user: other_user, author: author, state: :pending) } 17 18 let_it_be(:user3) { create(:user) } 19 20 specify { expect(described_class).to require_graphql_authorizations(:update_user) } 21 22 describe '#resolve' do 23 it 'marks all pending todos as done' do 24 todos = mutation_for(current_user).resolve[:todos] 25 26 expect(todo1.reload.state).to eq('done') 27 expect(todo2.reload.state).to eq('done') 28 expect(todo3.reload.state).to eq('done') 29 expect(other_user_todo.reload.state).to eq('pending') 30 31 expect(todos).to contain_exactly(todo1, todo3) 32 end 33 34 it 'behaves as expected if there are no todos for the requesting user' do 35 todos = mutation_for(user3).resolve[:todos] 36 37 expect(todo1.reload.state).to eq('pending') 38 expect(todo2.reload.state).to eq('done') 39 expect(todo3.reload.state).to eq('pending') 40 expect(other_user_todo.reload.state).to eq('pending') 41 42 expect(todos).to be_empty 43 end 44 45 context 'when user is not logged in' do 46 it 'fails with the expected error' do 47 expect { mutation_for(nil).resolve }.to raise_error(Gitlab::Graphql::Errors::ResourceNotAvailable) 48 end 49 end 50 end 51 52 def mutation_for(user) 53 described_class.new(object: nil, context: { current_user: user }, field: nil) 54 end 55end 56