Store resource
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Api::StoresController, type: :request do
|
||||
describe "GET /api/stores" do
|
||||
it "lists stores without a login, in name order" do
|
||||
create(:store, name: "Zed Games", catalog_url: "https://zed.example")
|
||||
create(:store, name: "Apex Games", catalog_url: "https://apex.example")
|
||||
|
||||
get "/api/stores"
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
json = JSON.parse(response.body)
|
||||
expect(json.map { |s| s["name"] }).to eq(["Apex Games", "Zed Games"])
|
||||
end
|
||||
|
||||
it "answers with the fields a client needs, camelCased" do
|
||||
create(:store)
|
||||
|
||||
get "/api/stores"
|
||||
|
||||
store = JSON.parse(response.body).first
|
||||
expect(store).to include("name", "catalogUrl", "storeRepositoryUrl")
|
||||
expect(store["catalogUrl"]).to eq("https://teletypegames.org")
|
||||
expect(store["storeRepositoryUrl"]).to end_with("/stores/ttg-desktop-store")
|
||||
end
|
||||
|
||||
it "leaves out soft-deleted stores" do
|
||||
create(:store, name: "Gone").update!(deleted_at: Time.current)
|
||||
|
||||
get "/api/stores"
|
||||
|
||||
expect(JSON.parse(response.body)).to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
FactoryBot.define do
|
||||
factory :store do
|
||||
name { "Teletype Games" }
|
||||
catalog_url { "https://teletypegames.org" }
|
||||
store_repository_url { "https://git.teletypegames.org/stores/ttg-desktop-store" }
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,33 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Store, type: :model do
|
||||
it { should validate_presence_of(:name) }
|
||||
it { should validate_presence_of(:catalog_url) }
|
||||
it { should validate_presence_of(:store_repository_url) }
|
||||
|
||||
it "rejects a catalog url that is not http(s)" do
|
||||
store = build(:store, catalog_url: "git@example.org:thing.git")
|
||||
expect(store).not_to be_valid
|
||||
expect(store.errors[:catalog_url]).to include("must be an http(s) URL")
|
||||
end
|
||||
|
||||
it "rejects a repository url that is not http(s)" do
|
||||
expect(build(:store, store_repository_url: "not a url")).not_to be_valid
|
||||
end
|
||||
|
||||
describe ".ordered" do
|
||||
it "lists stores by name" do
|
||||
later = create(:store, name: "Zed Games")
|
||||
first = create(:store, name: "Apex Games")
|
||||
|
||||
expect(Store.ordered).to eq([first, later])
|
||||
end
|
||||
end
|
||||
|
||||
it "hides soft-deleted stores" do
|
||||
store = create(:store)
|
||||
store.update!(deleted_at: Time.current)
|
||||
|
||||
expect(Store.all).to be_empty
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user