2020-10-24 23:57:45 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
RSpec.describe Clusters::Agent do
|
|
|
|
subject { create(:cluster_agent) }
|
|
|
|
|
2021-03-11 19:13:27 +05:30
|
|
|
it { is_expected.to belong_to(:created_by_user).class_name('User').optional }
|
2020-10-24 23:57:45 +05:30
|
|
|
it { is_expected.to belong_to(:project).class_name('::Project') }
|
|
|
|
it { is_expected.to have_many(:agent_tokens).class_name('Clusters::AgentToken') }
|
2021-06-08 01:23:25 +05:30
|
|
|
it { is_expected.to have_many(:last_used_agent_tokens).class_name('Clusters::AgentToken') }
|
2021-11-11 11:23:49 +05:30
|
|
|
it { is_expected.to have_many(:group_authorizations).class_name('Clusters::Agents::GroupAuthorization') }
|
|
|
|
it { is_expected.to have_many(:authorized_groups).through(:group_authorizations) }
|
|
|
|
it { is_expected.to have_many(:project_authorizations).class_name('Clusters::Agents::ProjectAuthorization') }
|
|
|
|
it { is_expected.to have_many(:authorized_projects).through(:project_authorizations).class_name('::Project') }
|
2020-10-24 23:57:45 +05:30
|
|
|
|
|
|
|
it { is_expected.to validate_presence_of(:name) }
|
|
|
|
it { is_expected.to validate_length_of(:name).is_at_most(63) }
|
|
|
|
it { is_expected.to validate_uniqueness_of(:name).scoped_to(:project_id) }
|
|
|
|
|
2020-11-24 15:15:51 +05:30
|
|
|
describe 'scopes' do
|
2021-01-03 14:25:43 +05:30
|
|
|
describe '.ordered_by_name' do
|
|
|
|
let(:names) { %w(agent-d agent-b agent-a agent-c) }
|
|
|
|
|
|
|
|
subject { described_class.ordered_by_name }
|
|
|
|
|
|
|
|
before do
|
|
|
|
names.each do |name|
|
|
|
|
create(:cluster_agent, name: name)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it { expect(subject.map(&:name)).to eq(names.sort) }
|
|
|
|
end
|
|
|
|
|
2020-11-24 15:15:51 +05:30
|
|
|
describe '.with_name' do
|
|
|
|
let!(:matching_name) { create(:cluster_agent, name: 'matching-name') }
|
|
|
|
let!(:other_name) { create(:cluster_agent, name: 'other-name') }
|
|
|
|
|
|
|
|
subject { described_class.with_name(matching_name.name) }
|
|
|
|
|
|
|
|
it { is_expected.to contain_exactly(matching_name) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-10-24 23:57:45 +05:30
|
|
|
describe 'validation' do
|
|
|
|
describe 'name validation' do
|
|
|
|
it 'rejects names that do not conform to RFC 1123', :aggregate_failures do
|
|
|
|
%w[Agent agentA agentAagain gent- -agent agent.a agent/a agent>a].each do |name|
|
|
|
|
agent = build(:cluster_agent, name: name)
|
|
|
|
|
|
|
|
expect(agent).not_to be_valid
|
|
|
|
expect(agent.errors[:name]).to eq(["can contain only lowercase letters, digits, and '-', but cannot start or end with '-'"])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'accepts valid names', :aggregate_failures do
|
|
|
|
%w[agent agent123 agent-123].each do |name|
|
|
|
|
agent = build(:cluster_agent, name: name)
|
|
|
|
|
|
|
|
expect(agent).to be_valid
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2021-02-22 17:27:13 +05:30
|
|
|
|
|
|
|
describe '#has_access_to?' do
|
|
|
|
let(:agent) { build(:cluster_agent) }
|
|
|
|
|
|
|
|
it 'has access to own project' do
|
|
|
|
expect(agent.has_access_to?(agent.project)).to be_truthy
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does not have access to other projects' do
|
|
|
|
expect(agent.has_access_to?(create(:project))).to be_falsey
|
|
|
|
end
|
|
|
|
end
|
2020-10-24 23:57:45 +05:30
|
|
|
end
|