84 lines
2.1 KiB
Ruby
84 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe 'query a single terraform state', feature_category: :infrastructure_as_code do
|
|
include GraphqlHelpers
|
|
include ::API::Helpers::RelatedResourcesHelpers
|
|
|
|
let_it_be(:terraform_state) { create(:terraform_state, :with_version, :locked) }
|
|
|
|
let(:latest_version) { terraform_state.latest_version }
|
|
let(:project) { terraform_state.project }
|
|
let(:current_user) { project.creator }
|
|
let(:data) { graphql_data.dig('project', 'terraformState') }
|
|
|
|
let(:query) do
|
|
graphql_query_for(
|
|
:project,
|
|
{ fullPath: project.full_path },
|
|
query_graphql_field(
|
|
:terraformState,
|
|
{ name: terraform_state.name },
|
|
%(
|
|
id
|
|
name
|
|
lockedAt
|
|
createdAt
|
|
updatedAt
|
|
|
|
latestVersion {
|
|
id
|
|
serial
|
|
createdAt
|
|
updatedAt
|
|
|
|
createdByUser {
|
|
id
|
|
}
|
|
|
|
job {
|
|
name
|
|
}
|
|
}
|
|
|
|
lockedByUser {
|
|
id
|
|
}
|
|
)
|
|
)
|
|
)
|
|
end
|
|
|
|
before do
|
|
post_graphql(query, current_user: current_user)
|
|
end
|
|
|
|
it_behaves_like 'a working graphql query'
|
|
|
|
it 'returns terraform state data' do
|
|
expect(data).to match a_graphql_entity_for(
|
|
terraform_state,
|
|
:name,
|
|
'lockedAt' => terraform_state.locked_at.iso8601,
|
|
'createdAt' => terraform_state.created_at.iso8601,
|
|
'updatedAt' => terraform_state.updated_at.iso8601,
|
|
'lockedByUser' => a_graphql_entity_for(terraform_state.locked_by_user),
|
|
'latestVersion' => a_graphql_entity_for(
|
|
latest_version,
|
|
'serial' => eq(latest_version.version),
|
|
'createdAt' => eq(latest_version.created_at.iso8601),
|
|
'updatedAt' => eq(latest_version.updated_at.iso8601),
|
|
'createdByUser' => a_graphql_entity_for(latest_version.created_by_user),
|
|
'job' => { 'name' => eq(latest_version.build.name) }
|
|
)
|
|
)
|
|
end
|
|
|
|
context 'unauthorized users' do
|
|
let(:current_user) { nil }
|
|
|
|
it { expect(data).to be_nil }
|
|
end
|
|
end
|