5bc58bac26
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC. A Forever lib class was included to handle future dates for PostgreSQL and MySQL, also changes were made to DeployToken to enforce Forever.date Also removes extra conditional from JwtController
134 lines
3.6 KiB
Ruby
134 lines
3.6 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe DeployToken do
|
|
subject(:deploy_token) { create(:deploy_token) }
|
|
|
|
it { is_expected.to have_many :project_deploy_tokens }
|
|
it { is_expected.to have_many(:projects).through(:project_deploy_tokens) }
|
|
|
|
describe '#ensure_token' do
|
|
it 'should ensure a token' do
|
|
deploy_token.token = nil
|
|
deploy_token.save
|
|
|
|
expect(deploy_token.token).not_to be_empty
|
|
end
|
|
end
|
|
|
|
describe '#ensure_at_least_one_scope' do
|
|
context 'with at least one scope' do
|
|
it 'should be valid' do
|
|
is_expected.to be_valid
|
|
end
|
|
end
|
|
|
|
context 'with no scopes' do
|
|
it 'should be invalid' do
|
|
deploy_token = build(:deploy_token, read_repository: false, read_registry: false)
|
|
|
|
expect(deploy_token).not_to be_valid
|
|
expect(deploy_token.errors[:base].first).to eq("Scopes can't be blank")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#scopes' do
|
|
context 'with all the scopes' do
|
|
it 'should return scopes assigned to DeployToken' do
|
|
expect(deploy_token.scopes).to eq([:read_repository, :read_registry])
|
|
end
|
|
end
|
|
|
|
context 'with only one scope' do
|
|
it 'should return scopes assigned to DeployToken' do
|
|
deploy_token = create(:deploy_token, read_registry: false)
|
|
expect(deploy_token.scopes).to eq([:read_repository])
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#revoke!' do
|
|
it 'should update revoke attribute' do
|
|
deploy_token.revoke!
|
|
expect(deploy_token.revoked?).to be_truthy
|
|
end
|
|
end
|
|
|
|
describe "#active?" do
|
|
context "when it has been revoked" do
|
|
it 'should return false' do
|
|
deploy_token.revoke!
|
|
expect(deploy_token.active?).to be_falsy
|
|
end
|
|
end
|
|
|
|
context "when it hasn't been revoked" do
|
|
it 'should return true' do
|
|
expect(deploy_token.active?).to be_truthy
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#username' do
|
|
it 'returns a harcoded username' do
|
|
expect(deploy_token.username).to eq("gitlab+deploy-token-#{deploy_token.id}")
|
|
end
|
|
end
|
|
|
|
describe '#has_access_to?' do
|
|
let(:project) { create(:project) }
|
|
|
|
subject(:deploy_token) { create(:deploy_token, projects: [project]) }
|
|
|
|
context 'when the deploy token has access to the project' do
|
|
it 'should return true' do
|
|
expect(deploy_token.has_access_to?(project)).to be_truthy
|
|
end
|
|
end
|
|
|
|
context 'when the deploy token does not have access to the project' do
|
|
it 'should return false' do
|
|
another_project = create(:project)
|
|
expect(deploy_token.has_access_to?(another_project)).to be_falsy
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#expires_at' do
|
|
context 'when using Forever.date' do
|
|
let(:deploy_token) { create(:deploy_token, expires_at: nil) }
|
|
|
|
it 'should return nil' do
|
|
expect(deploy_token.expires_at).to be_nil
|
|
end
|
|
end
|
|
|
|
context 'when using a personalized date' do
|
|
let(:expires_at) { Date.today + 5.months }
|
|
let(:deploy_token) { create(:deploy_token, expires_at: expires_at) }
|
|
|
|
it 'should return the personalized date' do
|
|
expect(deploy_token.expires_at).to eq(expires_at)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#expires_at=' do
|
|
context 'when passing nil' do
|
|
let(:deploy_token) { create(:deploy_token, expires_at: nil) }
|
|
|
|
it 'should assign Forever.date' do
|
|
expect(deploy_token.read_attribute(:expires_at)).to eq(Forever.date)
|
|
end
|
|
end
|
|
|
|
context 'when passign a value' do
|
|
let(:expires_at) { Date.today + 5.months }
|
|
let(:deploy_token) { create(:deploy_token, expires_at: expires_at) }
|
|
|
|
it 'should respect the value' do
|
|
expect(deploy_token.read_attribute(:expires_at)).to eq(expires_at)
|
|
end
|
|
end
|
|
end
|
|
end
|