diff options
Diffstat (limited to 'spec/models/work_item_spec.rb')
-rw-r--r-- | spec/models/work_item_spec.rb | 81 |
1 files changed, 57 insertions, 24 deletions
diff --git a/spec/models/work_item_spec.rb b/spec/models/work_item_spec.rb index e0ec54fd5ff..7963c0898b3 100644 --- a/spec/models/work_item_spec.rb +++ b/spec/models/work_item_spec.rb @@ -87,6 +87,14 @@ RSpec.describe WorkItem, feature_category: :portfolio_management do end end + describe '#todoable_target_type_name' do + it 'returns correct target name' do + work_item = build(:work_item) + + expect(work_item.todoable_target_type_name).to contain_exactly('Issue', 'WorkItem') + end + end + describe '#widgets' do subject { build(:work_item).widgets } @@ -176,17 +184,32 @@ RSpec.describe WorkItem, feature_category: :portfolio_management do is_expected.not_to include(:due, :remove_due_date) end end + + context 'when work item supports the current user todos widget' do + it 'returns todos related quick action commands' do + is_expected.to include(:todo, :done) + end + end + + context 'when work item does not support current user todos widget' do + let(:work_item) { build(:work_item, :task) } + + before do + WorkItems::Type.default_by_type(:task).widget_definitions + .find_by_widget_type(:current_user_todos).update!(disabled: true) + end + + it 'omits todos related quick action commands' do + is_expected.not_to include(:todo, :done) + end + end end describe 'transform_quick_action_params' do + let(:command_params) { { title: 'bar', assignee_ids: ['foo'] } } let(:work_item) { build(:work_item, :task) } - subject(:transformed_params) do - work_item.transform_quick_action_params({ - title: 'bar', - assignee_ids: ['foo'] - }) - end + subject(:transformed_params) { work_item.transform_quick_action_params(command_params) } it 'correctly separates widget params from regular params' do expect(transformed_params).to eq({ @@ -200,6 +223,30 @@ RSpec.describe WorkItem, feature_category: :portfolio_management do } }) end + + context 'with current user todos widget' do + let(:command_params) { { title: 'bar', todo_event: param } } + + where(:param, :expected) do + 'done' | 'mark_as_done' + 'add' | 'add' + end + + with_them do + it 'correctly transform todo_event param' do + expect(transformed_params).to eq({ + common: { + title: 'bar' + }, + widgets: { + current_user_todos_widget: { + action: expected + } + } + }) + end + end + end end describe 'callbacks' do @@ -212,11 +259,13 @@ RSpec.describe WorkItem, feature_category: :portfolio_management do create(:work_item) end - it_behaves_like 'issue_edit snowplow tracking' do + it_behaves_like 'internal event tracking' do let(:work_item) { create(:work_item) } - let(:property) { Gitlab::UsageDataCounters::IssueActivityUniqueCounter::ISSUE_CREATED } + let(:action) { Gitlab::UsageDataCounters::IssueActivityUniqueCounter::ISSUE_CREATED } let(:project) { work_item.project } let(:user) { work_item.author } + let(:namespace) { project.namespace } + subject(:service_action) { work_item } end end @@ -255,22 +304,6 @@ RSpec.describe WorkItem, feature_category: :portfolio_management do describe 'validations' do subject { work_item.valid? } - describe 'issue_type' do - let(:work_item) { build(:work_item, issue_type: issue_type) } - - context 'when a valid type' do - let(:issue_type) { :issue } - - it { is_expected.to eq(true) } - end - - context 'empty type' do - let(:issue_type) { nil } - - it { is_expected.to eq(false) } - end - end - describe 'confidentiality' do let_it_be(:project) { create(:project) } |