require "spec"

describe Core::Item::Component do
  it "test no machine" do
    person = Owner::Person.from_json(%({"uid": 0, "skills": [], "machines": [], "inventory_components": []}))
    componentModel = Core::Model::Component.from_json(%({
      "name": "graphic card",
      "attributes": {"comp_speed": 3},
      "slots": ["graphic"],
      "requirements": [],
      "hooks": {}
    }))
    componentNoMachineJson = Core::ItemJSON::Component.from_json(%({"id": 0, "uid": 0, "model": "graphic card"}))
    componentNoMachineJson.id.should eq 0
    componentNoMachineJson.model.should eq "graphic card"
    componentNoMachineJson.machine_name.should eq nil

    owner = Owner::Person.new(0)
    componentNoMachine = Core::Item::Component.from_json(%({"id": 0, "uid": 0, "model": "graphic card"}), [componentModel], owner)
    componentNoMachine.id.should eq 0
    componentNoMachine.model.should eq "graphic card"
    componentNoMachine.model_ref.name.should eq "graphic card"
    componentNoMachine.model_ref.should be componentModel
    componentNoMachine.model_ref.attributes["comp_speed"].should eq 3.0
    componentNoMachine.model_ref.requirements.should eq [] of Core::Requirement
    componentNoMachine.owner.should be owner
  end

  it "test with machine" do
    componentModel = Core::Model::Component.from_json(%({"name": "graphic card", "attributes": {"comp_speed": 3}, "slots": ["graphic"], "requirements": [], "hooks": {}}))
    componentNoMachineJson = Core::ItemJSON::Component.from_json(%({"id": 0, "model": "graphic card", "machine_name": "computer"}))
    componentNoMachineJson.id.should eq 0
    componentNoMachineJson.model.should eq "graphic card"
    componentNoMachineJson.machine_name.should eq "computer"
  end
end
