Implementation of a generic backend of eshop in Crystal
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 

109 lignes
3.4 KiB

require "./spec_helper"
describe SalesBackend do
it "can render status" do
get "/"
String.from_json(Global.response.not_nil!.body).should eq "OK"
end
it "can compare addresses" do
address_str1 = Address.from_json %(
{
"name": "String",
"address1": "String",
"address2": "{type: String, nilable: true}",
"postcode": "00001",
"city": "String",
"country": 2
}
)
address_str2 = Address.from_json %(
{
"name": "String",
"address1": "String",
"address2": "{type: String, nilable: true}",
"postcode": "00002",
"city": "String",
"country": 2
}
)
address_str3 = Address.from_json %(
{
"name": "String",
"address1": "String",
"address2": "{type: String, nilable: true}",
"postcode": "00003",
"city": "String",
"country": 2
}
)
(address_str1<=>address_str1).should eq( 0)
(address_str3<=>address_str2).should eq(1)
(address_str1<=>address_str2).should eq(-1)
end
it "can add a user able to log in and out" do
Dir.mkdir_p Statics.data_path + "user"
usr = User.new("dummy@domain.com")
usr.password_hash = "mywordismypassword"
post "/user", nil, usr.to_json
Global.response.not_nil!.status_code.should eq(200)
String.from_json(Global.response.not_nil!.body).should eq "OK"
post "/user", nil, usr.to_json
Global.response.not_nil!.status_code.should eq(500)
post "/login", nil, usr.to_json
Global.response.not_nil!.status_code.should eq(200)
uuid = UUID.from_json(Global.response.not_nil!.body).not_nil!
headers = HTTP::Headers.new
headers["user"] = usr.email.to_s
headers["api_token"] = uuid.to_s
get "/user/", headers
Global.response.not_nil!.status_code.should eq(200)
get "/user/address", headers
Global.response.not_nil!.status_code.should eq(200)
Global.response.not_nil!.body.should eq("null")
new_address_str = %([
{
"name": "String",
"address1": "String",
"address2": "{type: String, nilable: true}",
"postcode": "00000",
"city": "String",
"country": 2
}
])
post "/user/address", headers, new_address_str
Global.response.not_nil!.status_code.should eq(200)
get "/user/address", headers
Global.response.not_nil!.status_code.should eq(200)
address_state = Array(Address).from_json(Global.response.not_nil!.body)
expected_address_state = Array(Address).from_json(new_address_str)
(address_state.to_json == expected_address_state.to_json).should be_true
delete "/user/address", headers, new_address_str
Global.response.not_nil!.status_code.should eq(200)
get "/user/address", headers
Global.response.not_nil!.status_code.should eq(200)
address_state = Array(Address).from_json(Global.response.not_nil!.body)
address_state.size.should eq(0)
get "/user/tokens", headers
Global.response.not_nil!.status_code.should eq(200)
usr.tokens = Array(UUID).new
usr.tokens.not_nil!.push uuid
post "/logout", nil, usr.to_json
Global.response.not_nil!.status_code.should eq(200)
get "/user/", headers
Global.response.not_nil!.status_code.should eq(403)
get "/user/address", headers
Global.response.not_nil!.status_code.should eq(403)
get "/user/tokens", headers
Global.response.not_nil!.status_code.should eq(403)
end
end