Project

General

Profile

« Previous | Next » 

Revision 3ec971af

Added by Kamil Szubrycht about 5 years ago

Fixes #26270 - graphql: add PersonalAccessToken queries

View differences:

app/graphql/types/personal_access_token.rb
module Types
class PersonalAccessToken < BaseObject
description 'A Personal Access Token'
global_id_field :id
timestamps
field :name, String
field :expires_at, GraphQL::Types::ISO8601DateTime
field :last_used_at, GraphQL::Types::ISO8601DateTime
field :revoked, Boolean, method: :revoked?
field :expires, Boolean, method: :expires?
field :active, Boolean, method: :active?
field :used, Boolean, method: :used?
belongs_to :user, Types::User
end
end
app/graphql/types/query.rb
record_field :usergroup, Types::Usergroup
collection_field :usergroups, Types::Usergroup
record_field :personal_access_token, Types::PersonalAccessToken
collection_field :personal_access_tokens, Types::PersonalAccessToken
record_field :host, Types::Host
collection_field :hosts, Types::Host
app/graphql/types/user.rb
belongs_to :default_location, Types::Location
belongs_to :default_organization, Types::Organization
has_many :personal_access_tokens, Types::PersonalAccessToken
end
end
test/graphql/queries/personal_access_token_query_test.rb
require 'test_helper'
class Queries::PersonalAccessTokenQueryTest < ActiveSupport::TestCase
test 'fetching personalAccessToken attributes' do
personal_access_token = FactoryBot.create(:personal_access_token)
query = <<-GRAPHQL
query (
$id: String!
) {
personalAccessToken(id: $id) {
id
createdAt
updatedAt
name
expiresAt
lastUsedAt
revoked
expires
active
used
user {
id
}
}
}
GRAPHQL
personal_access_token_global_id = Foreman::GlobalId.for(personal_access_token)
variables = { id: personal_access_token_global_id }
context = { current_user: FactoryBot.create(:user, :admin) }
result = ForemanGraphqlSchema.execute(query, variables: variables, context: context)
expected_personal_access_token_attributes = {
'id' => personal_access_token_global_id,
'createdAt' => personal_access_token.created_at.utc.iso8601,
'updatedAt' => personal_access_token.updated_at.utc.iso8601,
'name' => personal_access_token.name,
'expiresAt' => personal_access_token.expires_at.utc.iso8601,
'lastUsedAt' => nil,
'revoked' => personal_access_token.revoked?,
'expires' => personal_access_token.expires?,
'active' => personal_access_token.active?,
'used' => personal_access_token.used?,
'user' => {
'id' => Foreman::GlobalId.for(personal_access_token.user)
}
}
assert_empty result['errors']
assert_equal expected_personal_access_token_attributes, result['data']['personalAccessToken']
end
end
test/graphql/queries/personal_access_tokens_query_test.rb
require 'test_helper'
class Queries::PersonalAccessTokensQueryTest < ActiveSupport::TestCase
test 'fetching personalAccessTokens attributes' do
FactoryBot.create_list(:personal_access_token, 2)
query = <<-GRAPHQL
query {
personalAccessTokens {
totalCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
edges {
cursor
node {
id
}
}
}
}
GRAPHQL
context = { current_user: FactoryBot.create(:user, :admin) }
result = ForemanGraphqlSchema.execute(query, variables: {}, context: context)
expected_count = PersonalAccessToken.count
assert_empty result['errors']
assert_equal expected_count, result['data']['personalAccessTokens']['totalCount']
assert_equal expected_count, result['data']['personalAccessTokens']['edges'].count
end
end
test/graphql/queries/user_query_test.rb
default_organization: organization,
locale: 'en',
timezone: 'Berlin')
FactoryBot.create_list(:personal_access_token, 2, user: user)
query = <<-GRAPHQL
query (
......
defaultOrganization {
id
}
personalAccessTokens {
totalCount
edges {
node {
id
}
}
}
}
}
GRAPHQL
......
},
'defaultOrganization' => {
'id' => Foreman::GlobalId.for(user.default_organization)
},
'personalAccessTokens' => {
'totalCount' => user.personal_access_tokens.count,
'edges' => user.personal_access_tokens.sort_by(&:id).map do |personal_access_token|
{
'node' => {
'id' => Foreman::GlobalId.for(personal_access_token)
}
}
end
}
}

Also available in: Unified diff