From 30a0746662d6cefc4f701490a9f5888e23ee86cb Mon Sep 17 00:00:00 2001 From: keinydev Date: Thu, 2 Sep 2021 12:06:21 -0500 Subject: [PATCH 1/3] Get Benefits --- app/controllers/api/v1/benefits_controller.rb | 11 ++++++++ app/models/benefit.rb | 3 +++ config/routes.rb | 1 + db/migrate/20210902163709_create_benefits.rb | 12 +++++++++ db/schema.rb | 10 +++++++- db/seeds.rb | 4 +++ spec/factories/benefits.rb | 8 ++++++ spec/requests/api/v1/benefits/index_spec.rb | 25 +++++++++++++++++++ 8 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 app/controllers/api/v1/benefits_controller.rb create mode 100644 app/models/benefit.rb create mode 100644 db/migrate/20210902163709_create_benefits.rb create mode 100644 spec/factories/benefits.rb create mode 100644 spec/requests/api/v1/benefits/index_spec.rb diff --git a/app/controllers/api/v1/benefits_controller.rb b/app/controllers/api/v1/benefits_controller.rb new file mode 100644 index 0000000..a8cca70 --- /dev/null +++ b/app/controllers/api/v1/benefits_controller.rb @@ -0,0 +1,11 @@ +module Api + module V1 + class BenefitsController < ApplicationController + + def index + @benefits = Benefit.all + render json: @benefits + end + end + end +end diff --git a/app/models/benefit.rb b/app/models/benefit.rb new file mode 100644 index 0000000..d75ca93 --- /dev/null +++ b/app/models/benefit.rb @@ -0,0 +1,3 @@ +class Benefit < ApplicationRecord + validates :name, presence: true, uniqueness: true +end diff --git a/config/routes.rb b/config/routes.rb index b48378a..f5f87c1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,6 +10,7 @@ namespace :v1, defaults: { format: :json } do resources :reset_passwords, only: :index resources :topics, only: :index + resources :benefits, only: :index resources :targets, only: [:index, :create, :destroy] resources :conversations, only: :index do resources :messages, only: [:index, :create] diff --git a/db/migrate/20210902163709_create_benefits.rb b/db/migrate/20210902163709_create_benefits.rb new file mode 100644 index 0000000..70b1ac3 --- /dev/null +++ b/db/migrate/20210902163709_create_benefits.rb @@ -0,0 +1,12 @@ +class CreateBenefits < ActiveRecord::Migration[6.1] + def change + create_table :benefits do |t| + t.string :name, null: false + t.decimal :price, null: false + + t.timestamps + end + + add_index :benefits, :name, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index cde5072..b8c5003 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,19 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_08_20_150714) do +ActiveRecord::Schema.define(version: 2021_09_02_163709) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "benefits", force: :cascade do |t| + t.string "name", null: false + t.decimal "price", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["name"], name: "index_benefits_on_name", unique: true + end + create_table "conversations", force: :cascade do |t| t.integer "user_a_id" t.integer "user_b_id" diff --git a/db/seeds.rb b/db/seeds.rb index 30c0d1b..9b0d248 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -5,3 +5,7 @@ topic3 = Topic.create(name: "Travel", image: Faker::LoremFlickr.image(search_terms: ['travel'])) topic4 = Topic.create(name: "Art", image: Faker::LoremFlickr.image(search_terms: ['art'])) topic5 = Topic.create(name: "Dating", image: Faker::LoremFlickr.image(search_terms: ['love'])) + +benefit1 = Benefit.create(name: "Basic Benefit", price: 7) +benefit2 = Benefit.create(name: "Plus Benefit", price: 15) +benefit3 = Benefit.create(name: "Premium Benefit", price: 22) diff --git a/spec/factories/benefits.rb b/spec/factories/benefits.rb new file mode 100644 index 0000000..d2cbca1 --- /dev/null +++ b/spec/factories/benefits.rb @@ -0,0 +1,8 @@ +require 'faker' + +FactoryBot.define do + factory :benefit do + name { Faker::Lorem.unique.word } + price { Faker::Commerce.price } + end +end diff --git a/spec/requests/api/v1/benefits/index_spec.rb b/spec/requests/api/v1/benefits/index_spec.rb new file mode 100644 index 0000000..e22c331 --- /dev/null +++ b/spec/requests/api/v1/benefits/index_spec.rb @@ -0,0 +1,25 @@ +require "rails_helper" + +describe "GET api/v1/benefits", type: :request do + + context 'when the route is valid' do + before do + create_list(:benefit, 10) + get api_v1_benefits_path + end + + it 'returns status 200' do + expect(response).to be_successful + end + + it 'returns first data row attributes' do + expect(json_response[0]['id']).to be_present + expect(json_response[0]['name']).to be_present + expect(json_response[0]['price']).to be_present + end + + it "returns the total data generated" do + expect(json_response.length).to eq(10) + end + end +end From 6c0f223755311a15589d8aa6ca97dded97b26588 Mon Sep 17 00:00:00 2001 From: keinydev Date: Thu, 2 Sep 2021 12:12:47 -0500 Subject: [PATCH 2/3] Comments with annotate --- app/models/benefit.rb | 10 ++++++++++ spec/factories/benefits.rb | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/models/benefit.rb b/app/models/benefit.rb index d75ca93..c35baf9 100644 --- a/app/models/benefit.rb +++ b/app/models/benefit.rb @@ -1,3 +1,13 @@ +# == Schema Information +# +# Table name: benefits +# +# id :bigint not null, primary key +# name :string not null +# price :decimal(, ) not null +# created_at :datetime not null +# updated_at :datetime not null +# class Benefit < ApplicationRecord validates :name, presence: true, uniqueness: true end diff --git a/spec/factories/benefits.rb b/spec/factories/benefits.rb index d2cbca1..b4450f6 100644 --- a/spec/factories/benefits.rb +++ b/spec/factories/benefits.rb @@ -1,3 +1,13 @@ +# == Schema Information +# +# Table name: benefits +# +# id :bigint not null, primary key +# name :string not null +# price :decimal(, ) not null +# created_at :datetime not null +# updated_at :datetime not null +# require 'faker' FactoryBot.define do From 1909fdbe2a0dbfb3a9fcc35ee0b6d7d46c382cbb Mon Sep 17 00:00:00 2001 From: keinydev Date: Thu, 2 Sep 2021 14:41:42 -0500 Subject: [PATCH 3/3] Minor fixes --- app/controllers/api/v1/benefits_controller.rb | 3 +-- app/views/api/v1/benefits/index.json.jbuilder | 7 +++++++ spec/requests/api/v1/benefits/index_spec.rb | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 app/views/api/v1/benefits/index.json.jbuilder diff --git a/app/controllers/api/v1/benefits_controller.rb b/app/controllers/api/v1/benefits_controller.rb index a8cca70..cee8ef7 100644 --- a/app/controllers/api/v1/benefits_controller.rb +++ b/app/controllers/api/v1/benefits_controller.rb @@ -3,8 +3,7 @@ module V1 class BenefitsController < ApplicationController def index - @benefits = Benefit.all - render json: @benefits + @benefits = Benefit.all end end end diff --git a/app/views/api/v1/benefits/index.json.jbuilder b/app/views/api/v1/benefits/index.json.jbuilder new file mode 100644 index 0000000..676753e --- /dev/null +++ b/app/views/api/v1/benefits/index.json.jbuilder @@ -0,0 +1,7 @@ +json.benefits do + json.array! @benefits do |benefit| + json.id benefit.id + json.name benefit.name + json.price benefit.price + end +end diff --git a/spec/requests/api/v1/benefits/index_spec.rb b/spec/requests/api/v1/benefits/index_spec.rb index e22c331..b197b37 100644 --- a/spec/requests/api/v1/benefits/index_spec.rb +++ b/spec/requests/api/v1/benefits/index_spec.rb @@ -13,13 +13,13 @@ end it 'returns first data row attributes' do - expect(json_response[0]['id']).to be_present - expect(json_response[0]['name']).to be_present - expect(json_response[0]['price']).to be_present + expect(json_response['benefits'][0]['id']).to be_present + expect(json_response['benefits'][0]['name']).to be_present + expect(json_response['benefits'][0]['price']).to be_present end it "returns the total data generated" do - expect(json_response.length).to eq(10) + expect(json_response['benefits'].length).to eq(10) end end end