local Account = require("service.account")

describe("Account", function()
  it("creates an account with valid parameters", function()
    local account, err = Account.new("acc_123", 5000)
    assert.is_nil(err)
    assert.is_not_nil(account)
    assert.are.equal("acc_123", account.id)
    assert.are.equal(5000, account.balance_minor)
    assert.is_true(account.is_active)
  end)

  it("fails to create an account with negative balance", function()
    local account, err = Account.new("acc_123", -100)
    assert.is_nil(account)
    assert.are.equal("initial balance must be non-negative", err)
  end)

  it("debits balance successfully", function()
    local account, _ = Account.new("acc_123", 5000)
    local success, err = account:debit(2000)
    assert.is_true(success)
    assert.is_nil(err)
    assert.are.equal(3000, account.balance_minor)
  end)

  it("rejects debit exceeding balance", function()
    local account, _ = Account.new("acc_123", 1000)
    local success, err = account:debit(2000)
    assert.is_false(success)
    assert.are.equal("insufficient funds", err)
  end)
end)
