Revision 3ec971af
Added by Kamil Szubrycht about 5 years ago
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
Fixes #26270 - graphql: add PersonalAccessToken queries