diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-06-07 12:36:41 +0300 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-06-13 10:53:54 +0300 |
commit | d03e687882552cedaac2a493c9dbf4a3d98e0bac (patch) | |
tree | eb7b75a677863e533a6b5defcfd1b1e70df08096 /spec/serializers/job_entity_spec.rb | |
parent | 0a80e50492d77d9947f382b3d55cb602fd4ad2f8 (diff) |
Rename BuildEntity to JobEntity
Diffstat (limited to 'spec/serializers/job_entity_spec.rb')
-rw-r--r-- | spec/serializers/job_entity_spec.rb | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/spec/serializers/job_entity_spec.rb b/spec/serializers/job_entity_spec.rb new file mode 100644 index 00000000000..6a694576b4a --- /dev/null +++ b/spec/serializers/job_entity_spec.rb @@ -0,0 +1,123 @@ +require 'spec_helper' + +describe JobEntity do + let(:user) { create(:user) } + let(:job) { create(:ci_build) } + let(:project) { job.project } + let(:request) { double('request') } + + before do + allow(request).to receive(:current_user).and_return(user) + project.add_developer(user) + end + + let(:entity) do + described_class.new(job, request: request) + end + + subject { entity.as_json } + + it 'contains paths to job page action' do + expect(subject).to include(:build_path) + end + + it 'does not contain sensitive information' do + expect(subject).not_to include(/token/) + expect(subject).not_to include(/variables/) + end + + it 'contains whether it is playable' do + expect(subject[:playable]).to eq job.playable? + end + + it 'contains timestamps' do + expect(subject).to include(:created_at, :updated_at) + end + + it 'contains details' do + expect(subject).to include :status + expect(subject[:status]).to include :icon, :favicon, :text, :label + end + + context 'when build is retryable' do + before do + job.update(status: :failed) + end + + it 'contains cancel path' do + expect(subject).to include(:retry_path) + end + end + + context 'when build is cancelable' do + before do + job.update(status: :running) + end + + it 'contains cancel path' do + expect(subject).to include(:cancel_path) + end + end + + context 'when job is a regular job' do + it 'does not contain path to play action' do + expect(subject).not_to include(:play_path) + end + + it 'is not a playable build' do + expect(subject[:playable]).to be false + end + end + + context 'when job is a manual action' do + let(:job) { create(:ci_build, :manual) } + + context 'when user is allowed to trigger action' do + before do + project.add_developer(user) + + create(:protected_branch, :developers_can_merge, + name: 'master', project: project) + end + + it 'contains path to play action' do + expect(subject).to include(:play_path) + end + + it 'is a playable action' do + expect(subject[:playable]).to be true + end + end + + context 'when user is not allowed to trigger action' do + it 'does not contain path to play action' do + expect(subject).not_to include(:play_path) + end + + it 'is not a playable action' do + expect(subject[:playable]).to be false + end + end + end + + context 'when job is generic commit status' do + let(:job) { create(:generic_commit_status, target_url: 'http://google.com') } + + it 'contains paths to target action' do + expect(subject).to include(:build_path) + end + + it 'does not contain paths to other action paths' do + expect(subject).not_to include(:retry_path, :cancel_path, :play_path) + end + + it 'contains timestamps' do + expect(subject).to include(:created_at, :updated_at) + end + + it 'contains details' do + expect(subject).to include :status + expect(subject[:status]).to include :icon, :favicon, :text, :label + end + end +end |