Seed retailers and calibers via database migration
This commit is contained in:
parent
56d02cf8cb
commit
cd8c080846
3 changed files with 107 additions and 39 deletions
|
|
@ -0,0 +1,63 @@
|
|||
defmodule Ammoprices.Repo.Migrations.SeedRetailersAndCalibers do
|
||||
use Ecto.Migration
|
||||
|
||||
def up do
|
||||
now = DateTime.utc_now() |> DateTime.truncate(:second) |> DateTime.to_naive()
|
||||
|
||||
retailers = [
|
||||
%{name: "Lucky Gunner", slug: "lucky-gunner", base_url: "https://www.luckygunner.com"},
|
||||
%{name: "SGAmmo", slug: "sgammo", base_url: "https://www.sgammo.com"},
|
||||
%{
|
||||
name: "Target Sports USA",
|
||||
slug: "target-sports-usa",
|
||||
base_url: "https://www.targetsportsusa.com"
|
||||
}
|
||||
]
|
||||
|
||||
for r <- retailers do
|
||||
execute("""
|
||||
INSERT INTO retailers (id, name, slug, base_url, inserted_at, updated_at)
|
||||
VALUES (gen_random_uuid(), '#{r.name}', '#{r.slug}', '#{r.base_url}', '#{now}', '#{now}')
|
||||
ON CONFLICT (slug) DO NOTHING
|
||||
""")
|
||||
end
|
||||
|
||||
calibers = [
|
||||
{"9mm Luger", "9mm-luger", "handgun", ~s({"9mm","9x19","9mm parabellum","9mm nato"})},
|
||||
{".45 ACP", "45-acp", "handgun", ~s({".45 acp","45 acp",".45 auto","45 auto"})},
|
||||
{".380 ACP", "380-acp", "handgun", ~s({".380","380 acp",".380 auto","380 auto"})},
|
||||
{".40 S&W", "40-sw", "handgun", ~s({".40 s&w","40 s&w",".40 cal","40 cal"})},
|
||||
{".38 Special", "38-special", "handgun", ~s({".38 spl","38 special",".38 spc","38 spl"})},
|
||||
{".357 Magnum", "357-magnum", "handgun", ~s({".357 mag","357 mag","357 magnum"})},
|
||||
{"10mm Auto", "10mm-auto", "handgun", ~s({"10mm","10mm auto"})},
|
||||
{"5.56x45 / .223 Rem", "556-223", "rifle",
|
||||
~s({"5.56","5.56x45",".223",".223 rem","223 remington","5.56 nato"})},
|
||||
{".308 Win / 7.62x51", "308-win", "rifle",
|
||||
~s({".308",".308 win","308 winchester","7.62x51","7.62 nato"})},
|
||||
{"7.62x39", "762x39", "rifle", ~s({"7.62x39","7.62x39mm"})},
|
||||
{".30-06 Springfield", "30-06", "rifle",
|
||||
~s({".30-06","30-06","30-06 springfield",".30-06 sprg"})},
|
||||
{".300 Blackout", "300-blackout", "rifle",
|
||||
~s({".300 blk","300 blackout",".300 aac blackout","300 blk"})},
|
||||
{"6.5 Creedmoor", "65-creedmoor", "rifle", ~s({"6.5 creedmoor","6.5cm","6.5 cm"})},
|
||||
{".22 LR", "22-lr", "rimfire", ~s({".22 lr","22 lr",".22 long rifle","22 long rifle"})},
|
||||
{".22 WMR", "22-wmr", "rimfire", ~s({".22 wmr","22 wmr",".22 magnum","22 mag"})},
|
||||
{".17 HMR", "17-hmr", "rimfire", ~s({".17 hmr","17 hmr",".17 hornady magnum"})},
|
||||
{"12 Gauge", "12-gauge", "shotgun", ~s({"12 gauge","12 ga","12ga"})},
|
||||
{"20 Gauge", "20-gauge", "shotgun", ~s({"20 gauge","20 ga","20ga"})}
|
||||
]
|
||||
|
||||
for {name, slug, category, aliases} <- calibers do
|
||||
execute("""
|
||||
INSERT INTO calibers (id, name, slug, category, aliases, inserted_at, updated_at)
|
||||
VALUES (gen_random_uuid(), '#{name}', '#{slug}', '#{category}', '#{aliases}', '#{now}', '#{now}')
|
||||
ON CONFLICT (slug) DO NOTHING
|
||||
""")
|
||||
end
|
||||
end
|
||||
|
||||
def down do
|
||||
execute("DELETE FROM calibers")
|
||||
execute("DELETE FROM retailers")
|
||||
end
|
||||
end
|
||||
|
|
@ -8,7 +8,7 @@ defmodule Ammoprices.CatalogTest do
|
|||
describe "retailers" do
|
||||
test "list_retailers/0 returns all retailers" do
|
||||
retailer = retailer_fixture()
|
||||
assert Catalog.list_retailers() == [retailer]
|
||||
assert retailer in Catalog.list_retailers()
|
||||
end
|
||||
|
||||
test "get_retailer!/1 returns the retailer with given id" do
|
||||
|
|
@ -22,11 +22,11 @@ defmodule Ammoprices.CatalogTest do
|
|||
end
|
||||
|
||||
test "create_retailer/1 with valid data creates a retailer" do
|
||||
attrs = %{name: "Lucky Gunner", slug: "lucky-gunner", base_url: "https://luckygunner.com"}
|
||||
attrs = %{name: "New Retailer", slug: "new-retailer", base_url: "https://newretailer.com"}
|
||||
assert {:ok, retailer} = Catalog.create_retailer(attrs)
|
||||
assert retailer.name == "Lucky Gunner"
|
||||
assert retailer.slug == "lucky-gunner"
|
||||
assert retailer.base_url == "https://luckygunner.com"
|
||||
assert retailer.name == "New Retailer"
|
||||
assert retailer.slug == "new-retailer"
|
||||
assert retailer.base_url == "https://newretailer.com"
|
||||
assert retailer.enabled == true
|
||||
end
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ defmodule Ammoprices.CatalogTest do
|
|||
describe "calibers" do
|
||||
test "list_calibers/0 returns all calibers" do
|
||||
caliber = caliber_fixture()
|
||||
assert Catalog.list_calibers() == [caliber]
|
||||
assert caliber in Catalog.list_calibers()
|
||||
end
|
||||
|
||||
test "list_calibers_by_category/1 filters by category" do
|
||||
|
|
@ -60,7 +60,8 @@ defmodule Ammoprices.CatalogTest do
|
|||
_rifle = caliber_fixture(%{name: "5.56", slug: "556", category: "rifle"})
|
||||
|
||||
result = Catalog.list_calibers_by_category("handgun")
|
||||
assert result == [handgun]
|
||||
assert handgun in result
|
||||
refute Enum.any?(result, &(&1.category != "handgun"))
|
||||
end
|
||||
|
||||
test "get_caliber!/1 returns the caliber with given id" do
|
||||
|
|
@ -75,15 +76,15 @@ defmodule Ammoprices.CatalogTest do
|
|||
|
||||
test "create_caliber/1 with valid data creates a caliber" do
|
||||
attrs = %{
|
||||
name: ".45 ACP",
|
||||
slug: "45-acp",
|
||||
name: ".50 AE",
|
||||
slug: "50-ae",
|
||||
category: "handgun",
|
||||
aliases: [".45", "45 auto"]
|
||||
aliases: [".50 ae", "50 action express"]
|
||||
}
|
||||
|
||||
assert {:ok, caliber} = Catalog.create_caliber(attrs)
|
||||
assert caliber.name == ".45 ACP"
|
||||
assert caliber.aliases == [".45", "45 auto"]
|
||||
assert caliber.name == ".50 AE"
|
||||
assert caliber.aliases == [".50 ae", "50 action express"]
|
||||
end
|
||||
|
||||
test "create_caliber/1 with invalid category returns error" do
|
||||
|
|
|
|||
|
|
@ -10,40 +10,44 @@ defmodule Ammoprices.Fixtures do
|
|||
alias Ammoprices.Repo
|
||||
|
||||
def retailer_fixture(attrs \\ %{}) do
|
||||
{:ok, retailer} =
|
||||
%Retailer{}
|
||||
|> Retailer.changeset(
|
||||
Map.merge(
|
||||
%{
|
||||
name: "Test Retailer",
|
||||
slug: "test-retailer-#{System.unique_integer([:positive])}",
|
||||
base_url: "https://example.com"
|
||||
},
|
||||
attrs
|
||||
)
|
||||
merged =
|
||||
Map.merge(
|
||||
%{
|
||||
name: "Test Retailer",
|
||||
slug: "test-retailer-#{System.unique_integer([:positive])}",
|
||||
base_url: "https://example.com"
|
||||
},
|
||||
attrs
|
||||
)
|
||||
|> Repo.insert()
|
||||
|
||||
retailer
|
||||
%Retailer{}
|
||||
|> Retailer.changeset(merged)
|
||||
|> Repo.insert!(
|
||||
on_conflict: {:replace, [:name, :base_url, :updated_at]},
|
||||
conflict_target: :slug,
|
||||
returning: true
|
||||
)
|
||||
end
|
||||
|
||||
def caliber_fixture(attrs \\ %{}) do
|
||||
{:ok, caliber} =
|
||||
%Caliber{}
|
||||
|> Caliber.changeset(
|
||||
Map.merge(
|
||||
%{
|
||||
name: "9mm Luger",
|
||||
slug: "9mm-luger-#{System.unique_integer([:positive])}",
|
||||
category: "handgun",
|
||||
aliases: ["9mm", "9x19"]
|
||||
},
|
||||
attrs
|
||||
)
|
||||
merged =
|
||||
Map.merge(
|
||||
%{
|
||||
name: "9mm Luger",
|
||||
slug: "9mm-luger-#{System.unique_integer([:positive])}",
|
||||
category: "handgun",
|
||||
aliases: ["9mm", "9x19"]
|
||||
},
|
||||
attrs
|
||||
)
|
||||
|> Repo.insert()
|
||||
|
||||
caliber
|
||||
%Caliber{}
|
||||
|> Caliber.changeset(merged)
|
||||
|> Repo.insert!(
|
||||
on_conflict: {:replace, [:name, :category, :aliases, :updated_at]},
|
||||
conflict_target: :slug,
|
||||
returning: true
|
||||
)
|
||||
end
|
||||
|
||||
def product_fixture(attrs \\ %{}) do
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue