solidus_graphql_api 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +42 -82
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +1 -167
- data/CONTRIBUTING.md +5 -5
- data/Gemfile +6 -1
- data/Gemfile-local +1 -0
- data/OLD_CHANGELOG.md +170 -0
- data/README.md +4 -4
- data/Rakefile +1 -0
- data/bin/sandbox +2 -6
- data/lib/solidus_graphql_api/batch_loader.rb +1 -1
- data/lib/solidus_graphql_api/context.rb +2 -2
- data/lib/solidus_graphql_api/queries/taxon/children_query.rb +1 -1
- data/lib/solidus_graphql_api/queries/taxonomy/taxons_query.rb +1 -1
- data/lib/solidus_graphql_api/version.rb +1 -1
- data/solidus_graphql_api.gemspec +5 -7
- data/spec/integration/mutations/checkout/add_addresses_to_checkout_spec.rb +1 -1
- data/spec/integration/queries/countries_spec.rb +2 -2
- data/spec/integration/queries/current_user_spec.rb +7 -2
- data/spec/integration/queries/taxonomies_spec.rb +5 -2
- data/spec/lib/solidus_graphql_api/batch_loader/belongs_to_spec.rb +24 -25
- data/spec/lib/solidus_graphql_api/batch_loader/has_many_spec.rb +17 -15
- data/spec/lib/solidus_graphql_api/batch_loader/has_many_through_spec.rb +23 -18
- data/spec/lib/solidus_graphql_api/batch_loader/has_one_spec.rb +17 -15
- data/spec/lib/solidus_graphql_api/queries/taxon/children_query_spec.rb +9 -5
- data/spec/lib/solidus_graphql_api/queries/taxonomy/taxons_query_spec.rb +8 -5
- data/spec/spec_helper.rb +6 -4
- data/spec/support/helpers/active_record.rb +18 -0
- data/spec/support/helpers/graphql.rb +4 -4
- metadata +16 -40
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# SolidusGraphqlApi
|
2
2
|
|
3
|
-
[![Maintainability](https://api.codeclimate.com/v1/badges/8ea7739ad6726ad8cfa7/maintainability)](https://codeclimate.com/github/solidusio
|
4
|
-
[![Test Coverage](https://api.codeclimate.com/v1/badges/8ea7739ad6726ad8cfa7/test_coverage)](https://codeclimate.com/github/solidusio
|
5
|
-
[![CircleCI](https://circleci.com/gh/solidusio
|
3
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/8ea7739ad6726ad8cfa7/maintainability)](https://codeclimate.com/github/solidusio/solidus_graphql_api/maintainability)
|
4
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/8ea7739ad6726ad8cfa7/test_coverage)](https://codeclimate.com/github/solidusio/solidus_graphql_api/test_coverage)
|
5
|
+
[![CircleCI](https://circleci.com/gh/solidusio/solidus_graphql_api.svg?style=shield)](https://circleci.com/gh/solidusio/solidus_graphql_api)
|
6
6
|
[![Gem Version](https://badge.fury.io/rb/solidus_graphql_api.svg)](https://badge.fury.io/rb/solidus_graphql_api)
|
7
7
|
|
8
8
|
Provides a [graphql](https://graphql.org/) api for the [Solidus](https://github.com/solidusio/solidus) ecommerce framework.
|
@@ -36,7 +36,7 @@ POST http://localhost:3000/graphql
|
|
36
36
|
|
37
37
|
## Documentation
|
38
38
|
|
39
|
-
The Solidus GraphQL API documentation can be found [here](https://solidusio
|
39
|
+
The Solidus GraphQL API documentation can be found [here](https://solidusio.github.io/solidus_graphql_api/docs/).
|
40
40
|
|
41
41
|
## Customizations
|
42
42
|
|
data/Rakefile
CHANGED
data/bin/sandbox
CHANGED
@@ -22,7 +22,7 @@ if [ ! -z $SOLIDUS_BRANCH ]
|
|
22
22
|
then
|
23
23
|
BRANCH=$SOLIDUS_BRANCH
|
24
24
|
else
|
25
|
-
BRANCH="
|
25
|
+
BRANCH="main"
|
26
26
|
fi
|
27
27
|
|
28
28
|
extension_name="solidus_graphql_api"
|
@@ -50,7 +50,6 @@ fi
|
|
50
50
|
cd ./sandbox
|
51
51
|
cat <<RUBY >> Gemfile
|
52
52
|
gem 'solidus', github: 'solidusio/solidus', branch: '$BRANCH'
|
53
|
-
gem 'solidus_auth_devise', '>= 2.1.0'
|
54
53
|
gem 'rails-i18n'
|
55
54
|
gem 'solidus_i18n'
|
56
55
|
|
@@ -69,13 +68,10 @@ unbundled bundle exec rake db:drop db:create
|
|
69
68
|
|
70
69
|
unbundled bundle exec rails generate solidus:install \
|
71
70
|
--auto-accept \
|
72
|
-
--
|
73
|
-
--enforce_available_locales=true \
|
74
|
-
--with-authentication=false \
|
71
|
+
--authentication=devise \
|
75
72
|
--payment-method=none \
|
76
73
|
$@
|
77
74
|
|
78
|
-
unbundled bundle exec rails generate solidus:auth:install
|
79
75
|
unbundled bundle exec rails generate ${extension_name}:install
|
80
76
|
|
81
77
|
echo
|
@@ -108,7 +108,7 @@ module SolidusGraphqlApi
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def graphql_loader_for(object_id, options = {}, &block)
|
111
|
-
::BatchLoader::GraphQL.for(object_id).batch(default_options.merge(options), &block)
|
111
|
+
::BatchLoader::GraphQL.for(object_id).batch(**default_options.merge(options), &block)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module SolidusGraphqlApi
|
4
4
|
class Context
|
5
5
|
AUTHORIZATION_HEADER = "Authorization"
|
6
|
-
TOKEN_PATTERN = /^Bearer (?<token>.*)
|
6
|
+
TOKEN_PATTERN = /^Bearer (?<token>.*)/
|
7
7
|
|
8
8
|
attr_reader :request, :headers
|
9
9
|
|
@@ -23,7 +23,7 @@ module SolidusGraphqlApi
|
|
23
23
|
|
24
24
|
def current_user
|
25
25
|
@current_user ||= begin
|
26
|
-
return nil
|
26
|
+
return nil if bearer_token.blank?
|
27
27
|
|
28
28
|
Spree.user_class.find_by(spree_api_key: bearer_token)
|
29
29
|
end
|
data/solidus_graphql_api.gemspec
CHANGED
@@ -10,14 +10,14 @@ Gem::Specification.new do |spec|
|
|
10
10
|
|
11
11
|
spec.summary = 'Solidus GraphQL API'
|
12
12
|
spec.description = 'GraphQL comes to Solidus'
|
13
|
-
spec.homepage = 'https://github.com/solidusio
|
13
|
+
spec.homepage = 'https://github.com/solidusio/solidus_graphql_api'
|
14
14
|
spec.license = 'BSD-3-Clause'
|
15
15
|
|
16
16
|
spec.metadata['homepage_uri'] = spec.homepage
|
17
|
-
spec.metadata['source_code_uri'] = 'https://github.com/solidusio
|
18
|
-
spec.metadata['changelog_uri'] = 'https://github.com/solidusio
|
17
|
+
spec.metadata['source_code_uri'] = 'https://github.com/solidusio/solidus_graphql_api'
|
18
|
+
spec.metadata['changelog_uri'] = 'https://github.com/solidusio/solidus_graphql_api/releases'
|
19
19
|
|
20
|
-
spec.required_ruby_version = Gem::Requirement.new('~>
|
20
|
+
spec.required_ruby_version = Gem::Requirement.new('~> 3.0')
|
21
21
|
|
22
22
|
# Specify which files should be added to the gem when it is released.
|
23
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -31,8 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
|
32
32
|
spec.add_dependency 'batch-loader', '~> 2.0'
|
33
33
|
spec.add_dependency 'graphql', '>= 1.10', '< 1.13'
|
34
|
-
spec.add_dependency '
|
35
|
-
spec.add_dependency 'solidus_core', ['>= 2.10', '< 4']
|
34
|
+
spec.add_dependency 'solidus_core', ['>= 3.2', '< 5']
|
36
35
|
spec.add_dependency 'solidus_support', '~> 0.6'
|
37
36
|
|
38
37
|
spec.add_development_dependency 'graphql-docs', '~> 2.0.1'
|
@@ -41,5 +40,4 @@ Gem::Specification.new do |spec|
|
|
41
40
|
spec.add_development_dependency 'simplecov', '~> 0.21'
|
42
41
|
spec.add_development_dependency 'solidus_dev_support', '~> 2.4'
|
43
42
|
spec.add_development_dependency 'timecop', '~> 0.9.1'
|
44
|
-
spec.add_development_dependency 'with_model', '~> 2.1.2'
|
45
43
|
end
|
@@ -13,7 +13,7 @@ RSpec.describe_mutation :add_addresses_to_checkout, mutation: :add_addresses_to_
|
|
13
13
|
]
|
14
14
|
}
|
15
15
|
|
16
|
-
let(:country_id) { SolidusGraphqlApi::Schema.id_from_object(create(:country), nil, nil) }
|
16
|
+
let(:country_id) { SolidusGraphqlApi::Schema.id_from_object(create(:country, states_required: false), nil, nil) }
|
17
17
|
let(:address) {
|
18
18
|
address = build_stubbed(:address).slice(:address1, :city, :phone, :zipcode)
|
19
19
|
address[:countryId] = country_id
|
@@ -9,8 +9,8 @@ RSpec.describe_query :countries, query: :countries, freeze_date: true do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
context 'when countries exists' do
|
12
|
-
let!(:us_country) { create(:country, :with_states, id: 1) }
|
13
|
-
let!(:it_country) { create(:country, id: 2, iso: 'IT') }
|
12
|
+
let!(:us_country) { create(:country, :with_states, id: 1, states_required: false) }
|
13
|
+
let!(:it_country) { create(:country, id: 2, iso: 'IT', states_required: false) }
|
14
14
|
|
15
15
|
it { is_expected.to match_response(:countries) }
|
16
16
|
end
|
@@ -12,8 +12,13 @@ RSpec.describe_query :current_user, query: :current_user, freeze_date: true do
|
|
12
12
|
bill_address: bill_address)
|
13
13
|
}
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
# Previos to Solidus v3.3, states_required was always false and the state was
|
16
|
+
# always automatically assigned. We force the behavior here to have the same
|
17
|
+
# response for any Solidus version.
|
18
|
+
let(:country) { create(:country, states_required: false) }
|
19
|
+
let(:state) { create(:state, name: "Alabama", abbr: "AL", country: country) }
|
20
|
+
let(:ship_address) { create(:ship_address, id: 1, zipcode: 10_001, country: country, state: state) }
|
21
|
+
let(:bill_address) { create(:bill_address, id: 2, zipcode: 10_002, country: country, state: state) }
|
17
22
|
let(:credit_card) {
|
18
23
|
create(:credit_card,
|
19
24
|
user: user,
|
@@ -9,9 +9,12 @@ RSpec.describe_query :taxonomies do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
context 'when taxonomies exists' do
|
12
|
-
let!(:brand_taxonomy)
|
12
|
+
let!(:brand_taxonomy) do
|
13
|
+
create(:taxonomy, :with_taxon_meta, :with_root_icon, id: 1, name: "Brand", root_taxon_id: 1)
|
14
|
+
end
|
13
15
|
let!(:category_taxonomy) { create(:taxonomy, :with_root_icon, id: 2, name: 'Category', root_taxon_id: 2) }
|
14
|
-
|
16
|
+
# Need to reload taxon to get the correct icon url, because the icon is attached after the taxon is created
|
17
|
+
let!(:taxon) { create(:taxon, :with_icon, id: 3, name: 'Solidus', taxonomy: brand_taxonomy).tap(&:reload) }
|
15
18
|
|
16
19
|
before do
|
17
20
|
taxon.update(parent: brand_taxonomy.root)
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
RSpec.describe SolidusGraphqlApi::BatchLoader::BelongsTo do
|
5
|
+
RSpec.describe SolidusGraphqlApi::BatchLoader::BelongsTo, skip: (ENV["DB"] == "mysql") do
|
6
|
+
include Helpers::ActiveRecord
|
7
|
+
|
6
8
|
subject(:loader) do
|
7
9
|
described_class.new(
|
8
10
|
object,
|
@@ -14,19 +16,21 @@ RSpec.describe SolidusGraphqlApi::BatchLoader::BelongsTo do
|
|
14
16
|
let(:options) { {} }
|
15
17
|
|
16
18
|
context 'with a regular association' do
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
before do
|
20
|
+
run_migrations do
|
21
|
+
create_table :articles, force: true
|
22
|
+
create_table :comments, force: true do |t|
|
23
|
+
t.belongs_to :article
|
24
|
+
end
|
20
25
|
end
|
26
|
+
create_model("Article")
|
27
|
+
create_model("Comment") { belongs_to :article }
|
21
28
|
end
|
22
29
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
model do
|
29
|
-
belongs_to :article
|
30
|
+
after do
|
31
|
+
run_migrations do
|
32
|
+
drop_table :articles
|
33
|
+
drop_table :comments
|
30
34
|
end
|
31
35
|
end
|
32
36
|
|
@@ -39,21 +43,16 @@ RSpec.describe SolidusGraphqlApi::BatchLoader::BelongsTo do
|
|
39
43
|
end
|
40
44
|
|
41
45
|
context 'with a polymorphic association' do
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
belongs_to :imageable, polymorphic: true
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
with_model :Article, scope: :all do
|
54
|
-
model do
|
55
|
-
has_many :images, as: :imageable
|
46
|
+
before do
|
47
|
+
run_migrations do
|
48
|
+
create_table :images, force: true do |t|
|
49
|
+
t.integer :imageable_id
|
50
|
+
t.string :imageable_type
|
51
|
+
end
|
52
|
+
create_table :articles, force: true
|
56
53
|
end
|
54
|
+
create_model("Image") { belongs_to :imageable, polymorphic: true }
|
55
|
+
create_model("Article") { has_many :images, as: :imageable }
|
57
56
|
end
|
58
57
|
|
59
58
|
let!(:object) { Image.create!(imageable: Article.create!) }
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
RSpec.describe SolidusGraphqlApi::BatchLoader::HasMany do
|
5
|
+
RSpec.describe SolidusGraphqlApi::BatchLoader::HasMany, skip: (ENV["DB"] == "mysql") do
|
6
|
+
include Helpers::ActiveRecord
|
7
|
+
|
6
8
|
subject(:loader) do
|
7
9
|
described_class.new(
|
8
10
|
article,
|
@@ -10,28 +12,28 @@ RSpec.describe SolidusGraphqlApi::BatchLoader::HasMany do
|
|
10
12
|
)
|
11
13
|
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
before do
|
16
|
+
run_migrations do
|
17
|
+
create_table :articles, force: true
|
18
|
+
create_table :comments, force: true do |t|
|
19
|
+
t.belongs_to :article
|
20
|
+
end
|
16
21
|
end
|
17
|
-
|
22
|
+
create_model("Article") { has_many :comments }
|
23
|
+
create_model("Comment") { belongs_to :article }
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
t.belongs_to :article
|
22
|
-
end
|
25
|
+
article.comments.create!
|
26
|
+
end
|
23
27
|
|
24
|
-
|
25
|
-
|
28
|
+
after do
|
29
|
+
run_migrations do
|
30
|
+
drop_table :articles
|
31
|
+
drop_table :comments
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
29
35
|
let!(:article) { Article.create! }
|
30
36
|
|
31
|
-
before do
|
32
|
-
article.comments.create!
|
33
|
-
end
|
34
|
-
|
35
37
|
it 'loads the association properly' do
|
36
38
|
expect(loader.load.sync).to eq(article.comments)
|
37
39
|
end
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
RSpec.describe SolidusGraphqlApi::BatchLoader::HasManyThrough do
|
5
|
+
RSpec.describe SolidusGraphqlApi::BatchLoader::HasManyThrough, skip: (ENV["DB"] == "mysql") do
|
6
|
+
include Helpers::ActiveRecord
|
7
|
+
|
6
8
|
subject(:loader) do
|
7
9
|
described_class.new(
|
8
10
|
physician,
|
@@ -10,37 +12,40 @@ RSpec.describe SolidusGraphqlApi::BatchLoader::HasManyThrough do
|
|
10
12
|
)
|
11
13
|
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
+
before do
|
16
|
+
run_migrations do
|
17
|
+
create_table :physicians, force: true
|
18
|
+
create_table :patients, force: true
|
19
|
+
create_table :appointments, force: true do |t|
|
20
|
+
t.belongs_to :physician
|
21
|
+
t.belongs_to :patient
|
22
|
+
end
|
23
|
+
end
|
24
|
+
create_model("Physician") do
|
15
25
|
has_many :appointments
|
16
26
|
has_many :patients, through: :appointments
|
17
27
|
end
|
18
|
-
|
19
|
-
|
20
|
-
with_model :Appointment, scope: :all do
|
21
|
-
table do |t|
|
22
|
-
t.belongs_to :physician, index: { name: :appointment_on_physician }
|
23
|
-
t.belongs_to :patient
|
28
|
+
create_model("Patient") do
|
29
|
+
has_many :appointments
|
24
30
|
end
|
25
|
-
|
26
|
-
model do
|
31
|
+
create_model("Appointment") do
|
27
32
|
belongs_to :physician
|
28
33
|
belongs_to :patient
|
29
34
|
end
|
35
|
+
|
36
|
+
physician.appointments.create!(patient: Patient.create!)
|
30
37
|
end
|
31
38
|
|
32
|
-
|
33
|
-
|
34
|
-
|
39
|
+
after do
|
40
|
+
run_migrations do
|
41
|
+
drop_table :physicians
|
42
|
+
drop_table :patients
|
43
|
+
drop_table :appointments
|
35
44
|
end
|
36
45
|
end
|
37
46
|
|
38
47
|
let!(:physician) { Physician.create! }
|
39
48
|
|
40
|
-
before do
|
41
|
-
physician.appointments.create!(patient: Patient.create!)
|
42
|
-
end
|
43
|
-
|
44
49
|
it 'loads the association properly' do
|
45
50
|
expect(loader.load.sync).to eq(physician.patients)
|
46
51
|
end
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
RSpec.describe SolidusGraphqlApi::BatchLoader::HasOne do
|
5
|
+
RSpec.describe SolidusGraphqlApi::BatchLoader::HasOne, skip: (ENV["DB"] == "mysql") do
|
6
|
+
include Helpers::ActiveRecord
|
7
|
+
|
6
8
|
subject(:loader) do
|
7
9
|
described_class.new(
|
8
10
|
article,
|
@@ -10,28 +12,28 @@ RSpec.describe SolidusGraphqlApi::BatchLoader::HasOne do
|
|
10
12
|
)
|
11
13
|
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
before do
|
16
|
+
run_migrations do
|
17
|
+
create_table :articles, force: true
|
18
|
+
create_table :images, force: true do |t|
|
19
|
+
t.belongs_to :article
|
20
|
+
end
|
16
21
|
end
|
17
|
-
|
22
|
+
create_model("Article") { has_one :image }
|
23
|
+
create_model("Image") { belongs_to :article }
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
t.belongs_to :article
|
22
|
-
end
|
25
|
+
article.create_image!
|
26
|
+
end
|
23
27
|
|
24
|
-
|
25
|
-
|
28
|
+
after do
|
29
|
+
run_migrations do
|
30
|
+
drop_table :articles
|
31
|
+
drop_table :images
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
29
35
|
let!(:article) { Article.create! }
|
30
36
|
|
31
|
-
before do
|
32
|
-
article.create_image!
|
33
|
-
end
|
34
|
-
|
35
37
|
it 'loads the association properly' do
|
36
38
|
expect(loader.load.sync).to eq(article.image)
|
37
39
|
end
|
@@ -3,9 +3,13 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
RSpec.describe SolidusGraphqlApi::Queries::Taxon::ChildrenQuery do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
it do
|
7
|
+
taxonomy = create(:taxonomy)
|
8
|
+
root = taxonomy.root
|
9
|
+
children = [
|
10
|
+
create(:taxon, name: "Taxon one", parent: root),
|
11
|
+
create(:taxon, name: "Taxon two", parent: root)
|
12
|
+
]
|
13
|
+
expect(described_class.new(taxon: root).call.sync).to match_array(children)
|
14
|
+
end
|
11
15
|
end
|
@@ -3,9 +3,12 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
RSpec.describe SolidusGraphqlApi::Queries::Taxonomy::TaxonsQuery do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
it do
|
7
|
+
taxonomy = create(:taxonomy)
|
8
|
+
root_taxon = taxonomy.root
|
9
|
+
taxon = create(:taxon, taxonomy: taxonomy, parent: root_taxon)
|
10
|
+
create(:taxon)
|
11
|
+
|
12
|
+
expect(described_class.new(taxonomy: taxonomy).call.sync).to match_array([root_taxon, taxon])
|
13
|
+
end
|
11
14
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -14,7 +14,6 @@ require dummy_env
|
|
14
14
|
# Requires factories and other useful helpers defined in spree_core.
|
15
15
|
require 'solidus_dev_support/rspec/feature_helper'
|
16
16
|
require "graphql/schema_comparator"
|
17
|
-
require 'with_model'
|
18
17
|
require 'timecop'
|
19
18
|
|
20
19
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
@@ -35,7 +34,12 @@ RSpec.configure do |config|
|
|
35
34
|
|
36
35
|
if defined?(ActiveStorage::Current)
|
37
36
|
config.before(:all) do
|
38
|
-
|
37
|
+
test_host = 'https://www.example.com'
|
38
|
+
if Rails.gem_version >= Gem::Version.new(7)
|
39
|
+
ActiveStorage::Current.url_options = { host: test_host }
|
40
|
+
else
|
41
|
+
ActiveStorage::Current.host = test_host
|
42
|
+
end
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
@@ -63,6 +67,4 @@ RSpec.configure do |config|
|
|
63
67
|
example.run
|
64
68
|
end
|
65
69
|
end
|
66
|
-
|
67
|
-
config.extend WithModel
|
68
70
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Helpers
|
4
|
+
module ActiveRecord
|
5
|
+
def run_migrations(&block)
|
6
|
+
migration = Class.new(::ActiveRecord::Migration[6.1]).tap do |klass|
|
7
|
+
klass.define_method(:up, &block)
|
8
|
+
end
|
9
|
+
::ActiveRecord::Migration.suppress_messages { migration.migrate(:up) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_model(name, &block)
|
13
|
+
stub_const(name, Class.new(ApplicationRecord)).tap do |klass|
|
14
|
+
klass.class_eval(&block) if block_given?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -14,12 +14,12 @@ module Helpers
|
|
14
14
|
JSON.parse(result.to_json, object_class: object_class, symbolize_names: true)
|
15
15
|
end
|
16
16
|
|
17
|
-
def execute_query(*args)
|
18
|
-
execute(RSpec.configuration.graphql_queries_dir, *args)
|
17
|
+
def execute_query(*args, **kwargs)
|
18
|
+
execute(RSpec.configuration.graphql_queries_dir, *args, **kwargs)
|
19
19
|
end
|
20
20
|
|
21
|
-
def execute_mutation(*args)
|
22
|
-
execute(RSpec.configuration.graphql_mutations_dir, *args)
|
21
|
+
def execute_mutation(*args, **kwargs)
|
22
|
+
execute(RSpec.configuration.graphql_mutations_dir, *args, **kwargs)
|
23
23
|
end
|
24
24
|
|
25
25
|
def decode_field_ids(field)
|