require_relative "./base" class Pex2SystemTest < LifePexTest def setup @fixture ||= FixtureReader.new # should be in startup @fixture.apply! "user_base" end def cleanup @fixture.cleanup! end private def login_as(username = "test", password = "test") api_post '/api/user/v1/login', { username: username, password: password } end def test_pex_life_cycle login_as assert last_response.ok? api_get "/api/pex/v2/pexs" assert last_response.ok? assert_empty api_reponse_body pex_input = { name: "pex1", category: "cat1", amount: 1.23 } api_post "/api/pex/v2/pexs", pex_input assert last_response.ok?, "A new pex should have been added" assert_message_exist assert_hash_include pex_input, api_reponse_body["pex"] assert_entity_owned api_reponse_body["pex"] pex_id = api_reponse_body.dig "pex", "id" api_get "/api/pex/v2/pexs" assert last_response.ok? assert_equal 1, api_reponse_body.size, "A new pex should exist" api_get "/api/pex/v2/pexs/#{pex_id}" assert last_response.ok? assert_hash_include pex_input, api_reponse_body["pex"] assert_entity_owned api_reponse_body["pex"] api_get "/api/pex/v2/pexs/#{pex_id}/more" assert last_response.ok? assert_hash_include pex_input, api_reponse_body["pex"] assert_entity_owned api_reponse_body["pex"] end def test_pex_errors api_post "/api/pex/v2/pexs", { name: 'pex1', amount: 1.23 } assert_client_error 401 # not connect login_as assert last_response.ok? api_post "/api/pex/v2/pexs", { } assert_client_error 400 # missing name api_post "/api/pex/v2/pexs", { amount: 1.23 } assert_client_error 400 # missing name api_post "/api/pex/v2/pexs", { name: 'pex1' } assert_client_error 400 # missing amount api_post "/api/pex/v2/pexs", { name: 'pex1', amount: 1.23 } api_post "/api/pex/v2/pexs", { name: 'pex1', amount: 1.23 } assert_client_error # duplicate end def test_security login_as "test" assert last_response.ok? api_post "/api/pex/v2/pexs", { name: 'pex1', amount: 1.23, category: "cat1" } assert last_response.ok? pex_id = api_reponse_body.dig "pex", "id" login_as "testbis" assert last_response.ok? api_get "/api/pex/v2/pexs" api_get "/api/pex/v2/pexs" assert last_response.ok? assert_empty api_reponse_body api_get "/api/pex/v2/pexs/#{pex_id}" assert_client_error api_get "/api/pex/v2/pexs/#{pex_id}/more" assert_client_error api_put "/api/pex/v2/pexs/#{pex_id}", {} assert_client_error api_delete "/api/pex/v2/pexs/#{pex_id}" assert_client_error api_post "/api/pex/v2/pexs/#{pex_id}/recap", {} assert_client_error end def test_pex_validation_and_counts login_as assert last_response.ok? api_post "/api/pex/v2/pexs", { name: 'pex1', amount: 1.23, category: "cat1" } assert last_response.ok? pex_id = api_reponse_body.dig "pex", "id" api_post "/api/pex/v2/pexs/#{pex_id}/recap", {} assert last_response.ok? assert_empty api_reponse_body["user_pexs"] end def test_pex_update login_as assert last_response.ok? api_post "/api/pex/v2/pexs", { name: 'pex1', amount: 1.23, category: "cat1" } assert last_response.ok? pex_id = api_reponse_body.dig "pex", "id" api_put "/api/pex/v2/pexs/#{pex_id}", { name: 'pex2', amount: 1.25 } assert last_response.ok? assert_equal pex_id, api_reponse_body.dig("pex", "id") assert_equal "pex2", api_reponse_body.dig("pex", "name") assert_equal 1.25, api_reponse_body.dig("pex", "amount") assert_equal "cat1", api_reponse_body.dig("pex", "category") end def test_pex_delete login_as assert last_response.ok? api_get "/api/pex/v2/pexs" assert last_response.ok? assert_equal 0, api_reponse_body.size, "No pex exist yet" api_post "/api/pex/v2/pexs", { name: 'pex1', amount: 1.23, category: "cat1" } assert last_response.ok? pex_id = api_reponse_body.dig "pex", "id" api_get "/api/pex/v2/pexs" assert last_response.ok? assert_equal 1, api_reponse_body.size, "A pex should exists now" api_delete "/api/pex/v2/pexs/#{pex_id}" assert last_response.ok? api_get "/api/pex/v2/pexs" assert last_response.ok? assert_equal 0, api_reponse_body.size, "Pex should be removed" end end