mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
119 lines
3.5 KiB
Ruby
119 lines
3.5 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Api::TaxonsController do
|
|
render_views
|
|
|
|
let(:taxonomy) { create(:taxonomy) }
|
|
let(:taxon) { create(:taxon, name: "Ruby", taxonomy: taxonomy) }
|
|
let(:taxon2) { create(:taxon, name: "Rails", taxonomy: taxonomy) }
|
|
let(:attributes) {
|
|
["id", "name", "pretty_name", "permalink", "position", "parent_id", "taxonomy_id"]
|
|
}
|
|
|
|
before do
|
|
allow(controller).to receive(:spree_current_user) { current_api_user }
|
|
|
|
taxon2.children << create(:taxon, name: "3.2.2", taxonomy: taxonomy)
|
|
taxon.children << taxon2
|
|
taxonomy.root.children << taxon
|
|
end
|
|
|
|
context "as a normal user" do
|
|
let(:current_api_user) { build(:user) }
|
|
|
|
it "gets all taxons for a taxonomy" do
|
|
api_get :index, taxonomy_id: taxonomy.id
|
|
|
|
expect(json_response.first['name']).to eq taxon.name
|
|
end
|
|
|
|
it "gets all taxons" do
|
|
api_get :index
|
|
|
|
json_names = json_response.map { |taxon_data| taxon_data["name"] }
|
|
expect(json_names).to include(taxon.name, taxon2.name)
|
|
end
|
|
|
|
it "can search for a single taxon" do
|
|
api_get :index, q: { name_cont: "Ruby" }
|
|
|
|
expect(json_response.count).to eq(1)
|
|
expect(json_response.first['name']).to eq "Ruby"
|
|
end
|
|
|
|
it "gets all taxons in JSTree form" do
|
|
api_get :jstree, taxonomy_id: taxonomy.id, id: taxon.id
|
|
|
|
response = json_response.first
|
|
expect(response["data"]).to eq(taxon2.name)
|
|
expect(response["attr"]).to eq("name" => taxon2.name, "id" => taxon2.id)
|
|
expect(response["state"]).to eq("closed")
|
|
end
|
|
|
|
it "cannot create a new taxon if not an admin" do
|
|
api_post :create, taxonomy_id: taxonomy.id, taxon: { name: "Location" }
|
|
|
|
assert_unauthorized!
|
|
end
|
|
|
|
it "cannot update a taxon" do
|
|
api_put :update, taxonomy_id: taxonomy.id,
|
|
id: taxon.id,
|
|
taxon: { name: "I hacked your store!" }
|
|
|
|
assert_unauthorized!
|
|
end
|
|
|
|
it "cannot delete a taxon" do
|
|
api_delete :destroy, taxonomy_id: taxonomy.id, id: taxon.id
|
|
|
|
assert_unauthorized!
|
|
end
|
|
end
|
|
|
|
context "as an admin" do
|
|
let(:current_api_user) { build(:admin_user) }
|
|
|
|
it "can create" do
|
|
api_post :create, taxonomy_id: taxonomy.id, taxon: { name: "Colors" }
|
|
|
|
expect(attributes.all? { |a| json_response.include? a }).to be true
|
|
expect(response.status).to eq(201)
|
|
|
|
expect(taxonomy.reload.root.children.count).to eq 2
|
|
|
|
expect(Spree::Taxon.last.parent_id).to eq taxonomy.root.id
|
|
expect(Spree::Taxon.last.taxonomy_id).to eq taxonomy.id
|
|
end
|
|
|
|
it "cannot create a new taxon with invalid attributes" do
|
|
api_post :create, taxonomy_id: taxonomy.id, taxon: {}
|
|
|
|
expect(response.status).to eq(422)
|
|
expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.")
|
|
errors = json_response["errors"]
|
|
|
|
expect(taxonomy.reload.root.children.count).to eq 1
|
|
end
|
|
|
|
it "cannot create a new taxon with invalid taxonomy_id" do
|
|
api_post :create, taxonomy_id: 1000, taxon: { name: "Colors" }
|
|
|
|
expect(response.status).to eq(422)
|
|
expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.")
|
|
|
|
errors = json_response["errors"]
|
|
expect(errors["taxonomy_id"]).not_to be_nil
|
|
expect(errors["taxonomy_id"].first).to eq "Invalid taxonomy id."
|
|
|
|
expect(taxonomy.reload.root.children.count).to eq 1
|
|
end
|
|
|
|
it "can destroy" do
|
|
api_delete :destroy, taxonomy_id: taxonomy.id, id: taxon2.id
|
|
|
|
expect(response.status).to eq(204)
|
|
end
|
|
end
|
|
end
|