souls 0.22.6 → 0.22.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/exe/souls +21 -5
  4. data/hoy/.env.sample +7 -0
  5. data/hoy/.gitignore +32 -0
  6. data/hoy/.irbrc +1 -0
  7. data/hoy/.rspec +3 -0
  8. data/hoy/.rubocop.yml +132 -0
  9. data/hoy/.ruby-version +1 -0
  10. data/hoy/CODE_OF_CONDUCT.md +74 -0
  11. data/hoy/Dockerfile +16 -0
  12. data/hoy/Dockerfile.dev +17 -0
  13. data/hoy/Gemfile +50 -0
  14. data/hoy/Gemfile.lock +407 -0
  15. data/hoy/LICENSE.txt +67 -0
  16. data/hoy/Procfile +2 -0
  17. data/hoy/Procfile.dev +2 -0
  18. data/hoy/README.md +61 -0
  19. data/hoy/Rakefile +5 -0
  20. data/hoy/app.rb +116 -0
  21. data/hoy/app/graphql/mutations/.keep +0 -0
  22. data/hoy/app/graphql/mutations/base/article/create_article.rb +30 -0
  23. data/hoy/app/graphql/mutations/base/article/delete_article.rb +17 -0
  24. data/hoy/app/graphql/mutations/base/article/destroy_delete_article.rb +17 -0
  25. data/hoy/app/graphql/mutations/base/article/update_article.rb +30 -0
  26. data/hoy/app/graphql/mutations/base/article_category/create_article_category.rb +21 -0
  27. data/hoy/app/graphql/mutations/base/article_category/delete_article_category.rb +17 -0
  28. data/hoy/app/graphql/mutations/base/article_category/destroy_delete_article_category.rb +17 -0
  29. data/hoy/app/graphql/mutations/base/article_category/update_article_category.rb +21 -0
  30. data/hoy/app/graphql/mutations/base/user/create_user.rb +31 -0
  31. data/hoy/app/graphql/mutations/base/user/delete_user.rb +17 -0
  32. data/hoy/app/graphql/mutations/base/user/destroy_delete_user.rb +17 -0
  33. data/hoy/app/graphql/mutations/base/user/update_user.rb +31 -0
  34. data/hoy/app/graphql/mutations/base_mutation.rb +33 -0
  35. data/hoy/app/graphql/mutations/user_manager/add_user_role.rb +22 -0
  36. data/hoy/app/graphql/mutations/user_manager/remove_user_role.rb +22 -0
  37. data/hoy/app/graphql/mutations/user_manager/sign_in_user.rb +45 -0
  38. data/hoy/app/graphql/queries/article.rb +13 -0
  39. data/hoy/app/graphql/queries/article_categories.rb +11 -0
  40. data/hoy/app/graphql/queries/article_category.rb +13 -0
  41. data/hoy/app/graphql/queries/articles.rb +11 -0
  42. data/hoy/app/graphql/queries/base_query.rb +9 -0
  43. data/hoy/app/graphql/queries/me.rb +11 -0
  44. data/hoy/app/graphql/queries/user.rb +13 -0
  45. data/hoy/app/graphql/queries/users.rb +11 -0
  46. data/hoy/app/graphql/resolvers/article_category_search.rb +41 -0
  47. data/hoy/app/graphql/resolvers/article_search.rb +57 -0
  48. data/hoy/app/graphql/resolvers/base.rb +17 -0
  49. data/hoy/app/graphql/resolvers/user_search.rb +63 -0
  50. data/hoy/app/graphql/souls_api_schema.rb +43 -0
  51. data/hoy/app/graphql/types/.keep +0 -0
  52. data/hoy/app/graphql/types/article_category_type.rb +12 -0
  53. data/hoy/app/graphql/types/article_type.rb +30 -0
  54. data/hoy/app/graphql/types/base/base_argument.rb +4 -0
  55. data/hoy/app/graphql/types/base/base_enum.rb +4 -0
  56. data/hoy/app/graphql/types/base/base_field.rb +5 -0
  57. data/hoy/app/graphql/types/base/base_input_object.rb +5 -0
  58. data/hoy/app/graphql/types/base/base_interface.rb +7 -0
  59. data/hoy/app/graphql/types/base/base_object.rb +6 -0
  60. data/hoy/app/graphql/types/base/base_scalar.rb +4 -0
  61. data/hoy/app/graphql/types/base/base_union.rb +4 -0
  62. data/hoy/app/graphql/types/base/mutation_type.rb +16 -0
  63. data/hoy/app/graphql/types/base/query_type.rb +18 -0
  64. data/hoy/app/graphql/types/connections/article_category_connection.rb +3 -0
  65. data/hoy/app/graphql/types/connections/article_connection.rb +3 -0
  66. data/hoy/app/graphql/types/connections/base_connection.rb +14 -0
  67. data/hoy/app/graphql/types/connections/user_connection.rb +3 -0
  68. data/hoy/app/graphql/types/edges/article_category_edge.rb +5 -0
  69. data/hoy/app/graphql/types/edges/article_edge.rb +5 -0
  70. data/hoy/app/graphql/types/edges/base_edge.rb +4 -0
  71. data/hoy/app/graphql/types/edges/user_edge.rb +5 -0
  72. data/hoy/app/graphql/types/user_type.rb +22 -0
  73. data/hoy/app/models/article.rb +4 -0
  74. data/hoy/app/models/article_category.rb +3 -0
  75. data/hoy/app/models/user.rb +19 -0
  76. data/hoy/app/policies/application_policy.rb +40 -0
  77. data/hoy/app/policies/article_category_policy.rb +31 -0
  78. data/hoy/app/policies/article_policy.rb +31 -0
  79. data/hoy/app/policies/user_policy.rb +35 -0
  80. data/hoy/app/utils/association_loader.rb +50 -0
  81. data/hoy/app/utils/firebase_id_token.rb +4 -0
  82. data/hoy/app/utils/json_web_token.rb +13 -0
  83. data/hoy/app/utils/record_loader.rb +10 -0
  84. data/hoy/app/utils/souls_helper.rb +96 -0
  85. data/hoy/cloudbuild.yml +32 -0
  86. data/hoy/config.ru +17 -0
  87. data/hoy/config/database.yml +33 -0
  88. data/hoy/config/souls.rb +4 -0
  89. data/hoy/constants/areas.rb +71 -0
  90. data/hoy/constants/column_name_ja.rb +27 -0
  91. data/hoy/db/migrate/20200006095538_create_users.rb +30 -0
  92. data/hoy/db/migrate/20200712180236_create_article_categories.rb +12 -0
  93. data/hoy/db/migrate/20200714215521_create_articles.rb +22 -0
  94. data/hoy/db/schema.rb +78 -0
  95. data/hoy/db/seeds.rb +44 -0
  96. data/hoy/github/workflows/delivery.yml +81 -0
  97. data/hoy/log/.keep +0 -0
  98. data/hoy/spec/factories/article_categories.rb +9 -0
  99. data/hoy/spec/factories/articles.rb +17 -0
  100. data/hoy/spec/factories/users.rb +23 -0
  101. data/hoy/spec/models/article_category_spec.rb +7 -0
  102. data/hoy/spec/models/article_spec.rb +7 -0
  103. data/hoy/spec/models/user_spec.rb +7 -0
  104. data/hoy/spec/mutations/base/article_category_spec.rb +46 -0
  105. data/hoy/spec/mutations/base/article_spec.rb +70 -0
  106. data/hoy/spec/mutations/base/user_spec.rb +76 -0
  107. data/hoy/spec/policies/article_category_policy_spec.rb +25 -0
  108. data/hoy/spec/policies/article_policy_spec.rb +25 -0
  109. data/hoy/spec/policies/user_policy_spec.rb +5 -0
  110. data/hoy/spec/queries/article_category_spec.rb +39 -0
  111. data/hoy/spec/queries/article_spec.rb +53 -0
  112. data/hoy/spec/queries/user_spec.rb +59 -0
  113. data/hoy/spec/resolvers/article_category_search_spec.rb +54 -0
  114. data/hoy/spec/resolvers/article_search_spec.rb +68 -0
  115. data/hoy/spec/resolvers/user_search_spec.rb +74 -0
  116. data/hoy/spec/spec_helper.rb +110 -0
  117. data/hoy/tmp/.keep +0 -0
  118. data/lib/souls/init.rb +16 -9
  119. data/lib/souls/version.rb +1 -1
  120. metadata +115 -1
@@ -0,0 +1,22 @@
1
+ class CreateArticles < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :articles do |t|
4
+ t.belongs_to :user
5
+ t.string :title, null: false, unique: true
6
+ t.text :body, null: false, default: ""
7
+ t.string :thumnail_url, null: false, default: ""
8
+ t.datetime :public_date, null: false, default: Time.now + 30.days
9
+ t.belongs_to :article_category, null: false
10
+ t.boolean :is_public, default: false, null: false
11
+ t.boolean :just_created, default: true, null: false
12
+ t.string :slag, null: false, unique: true
13
+ t.text :tags, array: true, default: []
14
+ t.boolean :is_deleted, null: false, default: false
15
+ t.timestamps
16
+ end
17
+ add_index :articles, :slag, unique: true
18
+ add_index :articles, :title, unique: true
19
+ add_index :articles, :is_public
20
+ add_index :articles, :is_deleted
21
+ end
22
+ end
data/hoy/db/schema.rb ADDED
@@ -0,0 +1,78 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # This file is the source Rails uses to define your schema when running `bin/rails
6
+ # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7
+ # be faster and is potentially less error prone than running all of your
8
+ # migrations from scratch. Old migrations may fail to apply correctly if those
9
+ # migrations use external dependencies or application code.
10
+ #
11
+ # It's strongly recommended that you check this file into your version control system.
12
+
13
+ ActiveRecord::Schema.define(version: 2020_07_14_215521) do
14
+
15
+ # These are extensions that must be enabled in order to support this database
16
+ enable_extension "plpgsql"
17
+
18
+ create_table "article_categories", force: :cascade do |t|
19
+ t.string "name", null: false
20
+ t.text "tags", default: [], array: true
21
+ t.boolean "is_deleted", default: false, null: false
22
+ t.datetime "created_at", precision: 6, null: false
23
+ t.datetime "updated_at", precision: 6, null: false
24
+ t.index ["is_deleted"], name: "index_article_categories_on_is_deleted"
25
+ t.index ["name"], name: "index_article_categories_on_name"
26
+ end
27
+
28
+ create_table "articles", force: :cascade do |t|
29
+ t.bigint "user_id"
30
+ t.string "title", null: false
31
+ t.text "body", default: "", null: false
32
+ t.string "thumnail_url", default: "", null: false
33
+ t.datetime "public_date", default: "2021-08-06 07:08:30", null: false
34
+ t.bigint "article_category_id", null: false
35
+ t.boolean "is_public", default: false, null: false
36
+ t.boolean "just_created", default: true, null: false
37
+ t.string "slag", null: false
38
+ t.text "tags", default: [], array: true
39
+ t.boolean "is_deleted", default: false, null: false
40
+ t.datetime "created_at", precision: 6, null: false
41
+ t.datetime "updated_at", precision: 6, null: false
42
+ t.index ["article_category_id"], name: "index_articles_on_article_category_id"
43
+ t.index ["is_deleted"], name: "index_articles_on_is_deleted"
44
+ t.index ["is_public"], name: "index_articles_on_is_public"
45
+ t.index ["slag"], name: "index_articles_on_slag", unique: true
46
+ t.index ["title"], name: "index_articles_on_title", unique: true
47
+ t.index ["user_id"], name: "index_articles_on_user_id"
48
+ end
49
+
50
+ create_table "users", force: :cascade do |t|
51
+ t.string "uid", null: false
52
+ t.string "username", default: "", null: false
53
+ t.string "screen_name", default: "", null: false
54
+ t.string "last_name", default: "", null: false
55
+ t.string "first_name", default: "", null: false
56
+ t.string "last_name_kanji", default: "", null: false
57
+ t.string "first_name_kanji", default: "", null: false
58
+ t.string "last_name_kana", default: "", null: false
59
+ t.string "first_name_kana", default: "", null: false
60
+ t.string "email", null: false
61
+ t.string "tel", default: "", null: false
62
+ t.string "icon_url", default: "", null: false
63
+ t.string "birthday", default: "", null: false
64
+ t.string "gender", default: "", null: false
65
+ t.string "lang", default: "ja", null: false
66
+ t.string "category", default: "user", null: false
67
+ t.integer "roles_mask", default: 1, null: false
68
+ t.boolean "is_deleted", default: false, null: false
69
+ t.datetime "created_at", precision: 6, null: false
70
+ t.datetime "updated_at", precision: 6, null: false
71
+ t.index ["email"], name: "index_users_on_email", unique: true
72
+ t.index ["is_deleted"], name: "index_users_on_is_deleted"
73
+ t.index ["screen_name"], name: "index_users_on_screen_name"
74
+ t.index ["uid"], name: "index_users_on_uid"
75
+ t.index ["username"], name: "index_users_on_username"
76
+ end
77
+
78
+ end
data/hoy/db/seeds.rb ADDED
@@ -0,0 +1,44 @@
1
+ require "./app"
2
+
3
+ Dir[File.expand_path("#{Rack::Directory.new('').root}/spec/factories/*.rb")]
4
+ .each { |file| require file }
5
+
6
+ def create_user
7
+ gimei = Gimei.name
8
+ user =
9
+ FactoryBot.create(
10
+ :user,
11
+ username: gimei.kanji,
12
+ last_name: gimei.last.hiragana,
13
+ first_name: gimei.first.hiragana,
14
+ last_name_kanji: gimei.last.kanji,
15
+ first_name_kanji: gimei.first.kanji,
16
+ last_name_kana: gimei.last.katakana,
17
+ first_name_kana: gimei.first.katakana,
18
+ gender: gimei.gender
19
+ )
20
+ puts(user.to_json)
21
+ return user.id if user
22
+ end
23
+
24
+ def create_article_category
25
+ article_category = FactoryBot.create(:article_category)
26
+ "Article Category Created!\n #{article_category.to_json}" if article_category
27
+ end
28
+
29
+ def create_article(user_id, article_category_id)
30
+ article = FactoryBot.create(:article, user_id: user_id, article_category_id: article_category_id)
31
+ "Article Created!\n #{article.to_json}" if article
32
+ end
33
+
34
+ %w[お知らせ 特集 ビーフ ポーク レシピ].each do |name|
35
+ puts ArticleCategory.create(name: name).to_json
36
+ end
37
+
38
+ 10.times { create_user }
39
+
40
+ 100.times do |_i|
41
+ user_id = User.find(rand(5).to_i + 1).id
42
+ article_category_id = ArticleCategory.find(rand(3).to_i + 1).id
43
+ puts create_article(user_id, article_category_id)
44
+ end
@@ -0,0 +1,81 @@
1
+ name: Delivery
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+
8
+ jobs:
9
+ build:
10
+
11
+ runs-on: ubuntu-20.04
12
+
13
+ services:
14
+ db:
15
+ image: postgres:13
16
+ ports: ["5433:5432"]
17
+ env:
18
+ POSTGRES_PASSWORD: postgres
19
+ options: >-
20
+ --health-cmd pg_isready
21
+ --health-interval 10s
22
+ --health-timeout 5s
23
+ --health-retries 5
24
+
25
+ steps:
26
+ - uses: actions/checkout@v2
27
+ - name: Set up Ruby 3.0
28
+ uses: actions/setup-ruby@v1
29
+ with:
30
+ ruby-version: 3.0
31
+ - name: Build and test with Rake
32
+ env:
33
+ PGHOST: 127.0.0.1
34
+ PGUSER: postgres
35
+ RACK_ENV: test
36
+ run: |
37
+ sudo apt-get -yqq install libpq-dev
38
+ gem install bundler
39
+ bundle install --jobs 4 --retry 3
40
+ bundle exec rake db:create RACK_ENV=test
41
+ bundle exec rake db:migrate RACK_ENV=test
42
+ bundle exec rspec
43
+
44
+ - name: Checkout the repository
45
+ uses: actions/checkout@v2
46
+
47
+ - name: GCP Authenticate
48
+ uses: google-github-actions/setup-gcloud@master
49
+ with:
50
+ version: "323.0.0"
51
+ project_id: ${{ secrets.GCP_PROJECT_ID }}
52
+ service_account_key: ${{ secrets.GCP_SA_KEY }}
53
+ export_default_credentials: true
54
+
55
+ - name: Configure Docker
56
+ run: gcloud auth configure-docker --quiet
57
+
58
+ - name: Build Docker container
59
+ run: docker build . -t gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}
60
+
61
+ - name: Push to Container Resistory
62
+ run: docker push gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}}
63
+
64
+ - name: Deploy to Cloud Run
65
+ run: |
66
+ gcloud run deploy ${{ secrets.APP_NAME }} \
67
+ --image=gcr.io/${{ secrets.GCP_PROJECT_ID }}/${{secrets.APP_NAME}} \
68
+ --memory=4Gi \
69
+ --region=asia-northeast1 \
70
+ --allow-unauthenticated \
71
+ --platform=managed \
72
+ --quiet \
73
+ --concurrency=80 \
74
+ --port=8080 \
75
+ --set-cloudsql-instances=${{ secrets.GCLOUDSQL_INSTANCE }} \
76
+ --set-env-vars="DB_USER=${{ secrets.DB_USER }}" \
77
+ --set-env-vars="DB_PW=${{ secrets.DB_PW }}" \
78
+ --set-env-vars="DB_HOST=${{ secrets.DB_HOST }}" \
79
+ --set-env-vars="TZ=${{ secrets.TZ }}" \
80
+ --set-env-vars="SLACK=${{ secrets.SLACK }}" \
81
+ --set-env-vars="SECRET_KEY_BASE=${{ secrets.SECRET_KEY_BASE }}" \
data/hoy/log/.keep ADDED
File without changes
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :article_category do
3
+ name { Faker::Books::CultureSeries.culture_ship_class }
4
+ tags { %w[tag1 tag2 tag3] }
5
+ is_deleted { false }
6
+ created_at { Time.now }
7
+ updated_at { Time.now }
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ FactoryBot.define do
2
+ factory :article do
3
+ association :user, factory: :user
4
+ title { Faker::Book.unique.title }
5
+ body { Faker::Quote.matz }
6
+ thumnail_url { Faker::Internet.url }
7
+ public_date { Time.now }
8
+ association :article_category, factory: :article_category
9
+ is_public { false }
10
+ just_created { false }
11
+ slag { Faker::Internet.password(min_length: 16) }
12
+ tags { %w[tag1 tag2 tag3] }
13
+ is_deleted { false }
14
+ created_at { Time.now }
15
+ updated_at { Time.now }
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ require "gimei"
2
+ FactoryBot.define do
3
+ factory :user do
4
+ uid { Faker::Internet.password }
5
+ username { Gimei.kanji }
6
+ screen_name { Faker::Internet.unique.username }
7
+ last_name { Gimei.last.hiragana }
8
+ first_name { Gimei.first.hiragana }
9
+ last_name_kanji { Gimei.last.kanji }
10
+ first_name_kanji { Gimei.first.kanji }
11
+ last_name_kana { Gimei.last.katakana }
12
+ first_name_kana { Gimei.last.katakana }
13
+ email { Faker::Internet.unique.email }
14
+ tel { Faker::PhoneNumber.subscriber_number(length: 10) }
15
+ icon_url { "https://picsum.photos/200" }
16
+ birthday { Faker::Date.birthday(min_age: 18, max_age: 65) }
17
+ gender { Gimei.male }
18
+ lang { "ja" }
19
+ category { "user" }
20
+ roles_mask { :normal }
21
+ is_deleted { false }
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ RSpec.describe("ArticleCategory Model テスト", type: :model) do
2
+ describe "ArticleCategory データを書き込む" do
3
+ it "valid ArticleCategory Model" do
4
+ expect(FactoryBot.build(:article_category)).to(be_valid)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ RSpec.describe("Article Model テスト", type: :model) do
2
+ describe "Article データを書き込む" do
3
+ it "valid Article Model" do
4
+ expect(FactoryBot.build(:article)).to(be_valid)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ RSpec.describe("User Model テスト", type: :model) do
2
+ describe "User データを書き込む" do
3
+ it "valid User Model" do
4
+ expect(FactoryBot.build(:user)).to(be_valid)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,46 @@
1
+ RSpec.describe("ArticleCategory Mutation テスト") do
2
+ describe "ArticleCategory データを登録する" do
3
+ let(:article_category) { FactoryBot.attributes_for(:article_category) }
4
+
5
+ let(:mutation) do
6
+ %(mutation {
7
+ createArticleCategory(input: {
8
+ name: "#{article_category[:name]}"
9
+ tags: #{article_category[:tags]}
10
+ isDeleted: #{article_category[:is_deleted]}
11
+ }) {
12
+ articleCategoryEdge {
13
+ node {
14
+ id
15
+ name
16
+ tags
17
+ isDeleted
18
+ }
19
+ }
20
+ }
21
+ }
22
+ )
23
+ end
24
+
25
+ subject(:result) do
26
+ SoulsApiSchema.execute(mutation).as_json
27
+ end
28
+
29
+ it "return ArticleCategory Data" do
30
+ begin
31
+ a1 = result.dig("data", "createArticleCategory", "articleCategoryEdge", "node")
32
+ raise unless a1.present?
33
+ rescue StandardError
34
+ raise(StandardError, result)
35
+ end
36
+ expect(a1).to(
37
+ include(
38
+ "id" => be_a(String),
39
+ "name" => be_a(String),
40
+ "tags" => be_all(String),
41
+ "isDeleted" => be_in([true, false])
42
+ )
43
+ )
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,70 @@
1
+ RSpec.describe("Article Mutation テスト") do
2
+ describe "Article データを登録する" do
3
+ let(:user) { FactoryBot.create(:user) }
4
+ let(:article_category) { FactoryBot.create(:article_category) }
5
+ let(:article) do
6
+ FactoryBot.attributes_for(:article, article_category_id: get_global_key("ArticleCategory", article_category.id))
7
+ end
8
+
9
+ let(:mutation) do
10
+ %(mutation {
11
+ createArticle(input: {
12
+ title: "#{article[:title]}"
13
+ body: "#{article[:body]}"
14
+ thumnailUrl: "#{article[:thumnail_url]}"
15
+ publicDate: "#{article[:public_date]}"
16
+ articleCategoryId: "#{article[:article_category_id]}"
17
+ isPublic: #{article[:is_public]}
18
+ justCreated: #{article[:just_created]}
19
+ slag: "#{article[:slag]}"
20
+ tags: #{article[:tags]}
21
+ isDeleted: #{article[:is_deleted]}
22
+ }) {
23
+ articleEdge {
24
+ node {
25
+ id
26
+ title
27
+ body
28
+ thumnailUrl
29
+ publicDate
30
+ isPublic
31
+ justCreated
32
+ slag
33
+ tags
34
+ isDeleted
35
+ }
36
+ }
37
+ }
38
+ }
39
+ )
40
+ end
41
+
42
+ subject(:result) do
43
+ context = { user: user }
44
+ SoulsApiSchema.execute(mutation, context: context).as_json
45
+ end
46
+
47
+ it "return Article Data" do
48
+ begin
49
+ a1 = result.dig("data", "createArticle", "articleEdge", "node")
50
+ raise unless a1.present?
51
+ rescue StandardError
52
+ raise(StandardError, result)
53
+ end
54
+ expect(a1).to(
55
+ include(
56
+ "id" => be_a(String),
57
+ "title" => be_a(String),
58
+ "body" => be_a(String),
59
+ "thumnailUrl" => be_a(String),
60
+ "publicDate" => be_a(String),
61
+ "isPublic" => be_in([true, false]),
62
+ "justCreated" => be_in([true, false]),
63
+ "slag" => be_a(String),
64
+ "tags" => be_all(String),
65
+ "isDeleted" => be_in([true, false])
66
+ )
67
+ )
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,76 @@
1
+ RSpec.describe("User Mutation テスト") do
2
+ describe "User データを登録する" do
3
+ let(:user) { FactoryBot.attributes_for(:user) }
4
+
5
+ let(:mutation) do
6
+ %(mutation {
7
+ createUser(input: {
8
+ uid: "#{user[:uid]}"
9
+ username: "#{user[:username]}"
10
+ screenName: "#{user[:screen_name]}"
11
+ lastName: "#{user[:last_name]}"
12
+ firstName: "#{user[:first_name]}"
13
+ lastNameKanji: "#{user[:last_name_kanji]}"
14
+ firstNameKanji: "#{user[:first_name_kanji]}"
15
+ lastNameKana: "#{user[:last_name_kana]}"
16
+ firstNameKana: "#{user[:first_name_kana]}"
17
+ email: "#{user[:email]}"
18
+ tel: "#{user[:tel]}"
19
+ iconUrl: "#{user[:icon_url]}"
20
+ birthday: "#{user[:birthday]}"
21
+ }) {
22
+ userEdge {
23
+ node {
24
+ id
25
+ uid
26
+ username
27
+ screenName
28
+ lastName
29
+ firstName
30
+ lastNameKanji
31
+ firstNameKanji
32
+ lastNameKana
33
+ firstNameKana
34
+ email
35
+ tel
36
+ iconUrl
37
+ birthday
38
+ }
39
+ }
40
+ }
41
+ }
42
+ )
43
+ end
44
+
45
+ subject(:result) do
46
+ SoulsApiSchema.execute(mutation).as_json
47
+ end
48
+
49
+ it "return User Data" do
50
+ begin
51
+ a1 = result.dig("data", "createUser", "userEdge", "node")
52
+ raise unless a1.present?
53
+ rescue StandardError
54
+ raise(StandardError, result)
55
+ end
56
+ expect(a1).to(
57
+ include(
58
+ "id" => be_a(String),
59
+ "uid" => be_a(String),
60
+ "username" => be_a(String),
61
+ "screenName" => be_a(String),
62
+ "lastName" => be_a(String),
63
+ "firstName" => be_a(String),
64
+ "lastNameKanji" => be_a(String),
65
+ "firstNameKanji" => be_a(String),
66
+ "lastNameKana" => be_a(String),
67
+ "firstNameKana" => be_a(String),
68
+ "email" => be_a(String),
69
+ "tel" => be_a(String),
70
+ "iconUrl" => be_a(String),
71
+ "birthday" => be_a(String)
72
+ )
73
+ )
74
+ end
75
+ end
76
+ end