Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/models/product.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class Product < ApplicationRecord
# has_many :containers, through: :product_containers, source: :container

validates :name, :slug, presence: true
validates :status, inclusion: { in: %w[new popular recommended outdated discontinued offline] }
validates :status, inclusion: { in: %w[new popular promoted demoted replaced discontinued offline] }

after_save :todo_after_save

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class UpdateRecommendedProductsToPromoted < ActiveRecord::Migration[6.1]
def up
Product.where(status: 'recommended').update_all(status: 'promoted')
end

def down
Product.where(status: 'promoted').update_all(status: 'recommended')
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class UpdateOutdatedProductsToDemotedOrReplaced < ActiveRecord::Migration[6.1]
def up
Product.where(status: 'outdated', superior_product_id: nil).update_all(status: 'demoted')
Product.where(status: 'outdated').where.not(superior_product_id: nil).update_all(status: 'replaced')
end

def down
Product.where(status: %w[demoted replaced]).update_all(status: 'outdated')
end
end
2 changes: 1 addition & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2025_06_04_083038) do
ActiveRecord::Schema.define(version: 2026_08_20_162054) do

# These are extensions that must be enabled in order to support this database
enable_extension "pgcrypto"
Expand Down
19 changes: 13 additions & 6 deletions test/fixtures/products.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,39 +39,46 @@ LMPA_Q6:
slug: LMPA-Q6
public: true
product_family: solder_paste
status: 'new'
status: new

IF_2005M:
name: IF 2005M
slug: IF-2005M
public: true
product_family: soldering_flux
status: 'popular'
status: popular

Pacific_2009M:
name: PacIFic 2009M
slug: PacIFic-2009M
public: true
product_family: soldering_flux
status: 'recommended'
status: promoted

WSF-7700:
name: WSF-7700
slug: WSF-7700
public: true
product_family: soldering_flux
status: demoted

LMPA_Q5:
name: LMPA Q5
slug: LMPA-Q5
public: true
product_family: solder_paste
status: 'discontinued'
status: discontinued

LMPA_Q4:
name: LMPA Q4
slug: LMPA-Q4
public: true
product_family: solder_paste
status: 'outdated'
status: replaced

LMPA_Q7:
name: LMPA Q7
slug: LMPA-Q7
public: false
product_family: solder_paste
status: 'offline'
status: offline
8 changes: 4 additions & 4 deletions test/integration/v1/public/products_integration_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ def setup

json = JSON.parse(@response.body)

# Should return 5 out of 6 products (should filter out public=false)
assert_equal 5, json['data'].length
# Should return 6 out of 7 products (should filter out public=false)
assert_equal 6, json['data'].length
end

test 'can fetch one by slug' do
Expand All @@ -44,7 +44,7 @@ def setup
end

test 'can include product family' do
skip("TODO: improve test")
skip('TODO: improve test')

get '/v1/public/products/LMPA-Q6?include=product_family', headers: @header

Expand All @@ -61,7 +61,7 @@ def setup
end

test 'can include family and images' do
skip("TODO: includes become optional in the payload")
skip('TODO: includes become optional in the payload')

# curl "http://localhost:3000/v1/public/products?slug=LMPA-Q6&include=product-family,product-images,product-images.image" -H "Content-Type: application/vnd.api+json"
get '/v1/public/products?slug=IF-2005M&include=product-family,product-images,product-images.image', headers: @header
Expand Down
10 changes: 7 additions & 3 deletions test/models/product_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class ProductTest < ActiveSupport::TestCase
assert_not product.valid?
end

test 'valid with 5 statuses' do
test 'valid with 6 statuses' do
product = Product.new(
name: 'Foo 2000',
slug: 'Foo-2000',
Expand All @@ -89,12 +89,16 @@ class ProductTest < ActiveSupport::TestCase
assert product.valid?
product.update(status: 'popular')
assert product.valid?
product.update(status: 'recommended')
product.update(status: 'promoted')
assert product.valid?
product.update(status: 'outdated')
product.update(status: 'demoted')
assert product.valid?
product.update(status: 'replaced')
assert product.valid?
product.update(status: 'discontinued')
assert product.valid?
product.update(status: 'bogus')
assert_not product.valid?
end

test 'defaults new products to offline' do
Expand Down
Loading