Skip to content

Commit 4fe1716

Browse files
committed
* add account query
* auto add an account for users without an account
1 parent a4f1121 commit 4fe1716

File tree

7 files changed

+94
-2
lines changed

7 files changed

+94
-2
lines changed

app/graphql/resolvers/account.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# frozen_string_literal: true
2+
3+
module Resolvers
4+
# Resolver to return a user
5+
class Account < BaseResolver
6+
type Types::AccountType, null: true
7+
description 'Returns the account for the user.'
8+
9+
def resolve
10+
context[:current_user] ? context[:current_user].account : nil
11+
end
12+
end
13+
end

app/graphql/types/account_type.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# frozen_string_literal: true
2+
3+
module Types
4+
# GraphQL type for a user
5+
class AccountType < BaseModel
6+
field :name, String, null: false
7+
end
8+
end

app/graphql/types/query_type.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ class QueryType < BaseObject
88

99
field :users, Types::UserType.connection_type, null: false
1010
def users(**_args)
11-
::User.accessible_by(current_ability)
11+
::User.accessible_by(current_ability).includes(:account)
1212
end
1313
field :user, resolver: Resolvers::User
1414

15+
field :account, resolver: Resolvers::Account
16+
1517
def current_ability
1618
Ability.new(context[:current_user])
1719
end

app/graphql/types/user_type.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ class UserType < BaseModel
77
field :first_name, String, null: false
88
field :last_name, String, null: false
99
field :email, String, null: true
10+
field :account, Types::AccountType, null: false
1011
end
1112
end

app/models/user.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class User < ApplicationRecord
6464

6565
# - CALLBACKS
6666
after_initialize :setup_new_user, if: :new_record?
67+
before_validation :setup_account
6768

6869
# return first and lastname
6970
def name
@@ -79,6 +80,10 @@ def status_color
7980

8081
private
8182

83+
def setup_account
84+
self.account = Account.create!(name: 'My company') if account.nil?
85+
end
86+
8287
def setup_new_user
8388
self.role ||= :user
8489
end

db/seeds.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
user = User.create(
1+
user = User.create!(
22
email: ENV['ADMIN_EMAIL'],
33
password: ENV['ADMIN_PASSWORD'],
44
password_confirmation: ENV['ADMIN_PASSWORD'],
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# frozen_string_literal: true
2+
3+
require 'rails_helper'
4+
5+
RSpec.describe Resolvers::Account, type: :request do
6+
subject(:graphql!) { result }
7+
8+
let(:result) do
9+
GraphqlSchema.execute(
10+
query_string,
11+
variables: variables,
12+
context: context
13+
)
14+
end
15+
16+
let(:variables) do
17+
{}
18+
end
19+
20+
let(:query_string) do
21+
<<-GRAPHQL
22+
query {
23+
account {
24+
id
25+
name
26+
}
27+
}
28+
GRAPHQL
29+
end
30+
31+
describe 'account' do
32+
context 'when there\'s no current user' do
33+
let(:context) do
34+
{
35+
current_user: nil
36+
}
37+
end
38+
39+
it 'returns nil' do
40+
graphql!
41+
expect(result['data']['account']).to eq(nil)
42+
end
43+
end
44+
45+
context 'when there\'s a current user' do
46+
let!(:user) do
47+
create(:user)
48+
end
49+
50+
let(:context) do
51+
{
52+
current_user: user
53+
}
54+
end
55+
56+
it 'returns account of user' do
57+
graphql!
58+
account_id = result['data']['account']['id']
59+
expect(account_id).to eq(user.account.id)
60+
end
61+
end
62+
end
63+
end

0 commit comments

Comments
 (0)