blob: c76111cbdebad3a2c93ac7714a2d45aae62b5be4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe DesignManagement::MoveDesignsService do
include DesignManagementTestHelpers
let_it_be(:issue) { create(:issue) }
let_it_be(:developer) { create(:user, developer_projects: [issue.project]) }
let_it_be(:designs) { create_list(:design, 3, :with_relative_position, issue: issue) }
let(:project) { issue.project }
let(:service) { described_class.new(current_user, params) }
let(:params) do
{
current_design: current_design,
previous_design: previous_design,
next_design: next_design
}
end
let(:current_user) { developer }
let(:current_design) { nil }
let(:previous_design) { nil }
let(:next_design) { nil }
before do
enable_design_management
end
describe '#execute' do
subject { service.execute }
context 'the feature is unavailable' do
let(:current_design) { designs.first }
let(:previous_design) { designs.second }
let(:next_design) { designs.third }
before do
stub_feature_flags(reorder_designs: false)
end
it 'raises cannot_move' do
expect(subject).to be_error.and(have_attributes(message: :cannot_move))
end
context 'but it is available on the current project' do
before do
stub_feature_flags(reorder_designs: issue.project)
end
it 'is successful' do
expect(subject).to be_success
end
end
end
context 'the user cannot move designs' do
let(:current_design) { designs.first }
let(:current_user) { build_stubbed(:user) }
it 'raises cannot_move' do
expect(subject).to be_error.and(have_attributes(message: :cannot_move))
end
end
context 'the designs are not distinct' do
let(:current_design) { designs.first }
let(:previous_design) { designs.first }
it 'raises not_distinct' do
expect(subject).to be_error.and(have_attributes(message: :not_distinct))
end
end
context 'the designs are not on the same issue' do
let(:current_design) { designs.first }
let(:previous_design) { create(:design) }
it 'raises not_same_issue' do
expect(subject).to be_error.and(have_attributes(message: :not_same_issue))
end
end
context 'no focus is passed' do
let(:previous_design) { designs.second }
let(:next_design) { designs.third }
it 'raises no_focus' do
expect(subject).to be_error.and(have_attributes(message: :no_focus))
end
end
context 'no neighbours are passed' do
let(:current_design) { designs.first }
it 'raises no_neighbors' do
expect(subject).to be_error.and(have_attributes(message: :no_neighbors))
end
end
context 'the designs are not adjacent' do
let(:current_design) { designs.first }
let(:previous_design) { designs.second }
let(:next_design) { designs.third }
it 'raises not_adjacent' do
create(:design, issue: issue, relative_position: next_design.relative_position - 1)
expect(subject).to be_error.and(have_attributes(message: :not_adjacent))
end
end
context 'moving a design with neighbours' do
let(:current_design) { designs.first }
let(:previous_design) { designs.second }
let(:next_design) { designs.third }
it 'calls move_between and is successful' do
expect(current_design).to receive(:move_between).with(previous_design, next_design)
expect(subject).to be_success
end
end
end
end
|