File tree Expand file tree Collapse file tree 7 files changed +94
-2
lines changed Expand file tree Collapse file tree 7 files changed +94
-2
lines changed Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change @@ -8,10 +8,12 @@ class QueryType < BaseObject
8
8
9
9
field :users , Types ::UserType . connection_type , null : false
10
10
def users ( **_args )
11
- ::User . accessible_by ( current_ability )
11
+ ::User . accessible_by ( current_ability ) . includes ( :account )
12
12
end
13
13
field :user , resolver : Resolvers ::User
14
14
15
+ field :account , resolver : Resolvers ::Account
16
+
15
17
def current_ability
16
18
Ability . new ( context [ :current_user ] )
17
19
end
Original file line number Diff line number Diff line change @@ -7,5 +7,6 @@ class UserType < BaseModel
7
7
field :first_name , String , null : false
8
8
field :last_name , String , null : false
9
9
field :email , String , null : true
10
+ field :account , Types ::AccountType , null : false
10
11
end
11
12
end
Original file line number Diff line number Diff line change @@ -64,6 +64,7 @@ class User < ApplicationRecord
64
64
65
65
# - CALLBACKS
66
66
after_initialize :setup_new_user , if : :new_record?
67
+ before_validation :setup_account
67
68
68
69
# return first and lastname
69
70
def name
@@ -79,6 +80,10 @@ def status_color
79
80
80
81
private
81
82
83
+ def setup_account
84
+ self . account = Account . create! ( name : 'My company' ) if account . nil?
85
+ end
86
+
82
87
def setup_new_user
83
88
self . role ||= :user
84
89
end
Original file line number Diff line number Diff line change 1
- user = User . create (
1
+ user = User . create! (
2
2
email : ENV [ 'ADMIN_EMAIL' ] ,
3
3
password : ENV [ 'ADMIN_PASSWORD' ] ,
4
4
password_confirmation : ENV [ 'ADMIN_PASSWORD' ] ,
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments