import Badge from "discourse/models/badge";

QUnit.module("model:badge");

QUnit.test("newBadge", assert => {
  const badge1 = Badge.create({ name: "New Badge" }),
    badge2 = Badge.create({ id: 1, name: "Old Badge" });
  assert.ok(badge1.get("newBadge"), "badges without ids are new");
  assert.ok(!badge2.get("newBadge"), "badges with ids are not new");
});

QUnit.test("createFromJson array", assert => {
  const badgesJson = {
    badge_types: [{ id: 6, name: "Silver 1" }],
    badges: [{ id: 1126, name: "Badge 1", description: null, badge_type_id: 6 }]
  };

  const badges = Badge.createFromJson(badgesJson);

  assert.ok(Array.isArray(badges), "returns an array");
  assert.equal(badges[0].get("name"), "Badge 1", "badge details are set");
  assert.equal(
    badges[0].get("badge_type.name"),
    "Silver 1",
    "badge_type reference is set"
  );
});

QUnit.test("createFromJson single", assert => {
  const badgeJson = {
    badge_types: [{ id: 6, name: "Silver 1" }],
    badge: { id: 1126, name: "Badge 1", description: null, badge_type_id: 6 }
  };

  const badge = Badge.createFromJson(badgeJson);

  assert.ok(!Array.isArray(badge), "does not returns an array");
});

QUnit.test("updateFromJson", assert => {
  const badgeJson = {
    badge_types: [{ id: 6, name: "Silver 1" }],
    badge: { id: 1126, name: "Badge 1", description: null, badge_type_id: 6 }
  };
  const badge = Badge.create({ name: "Badge 1" });
  badge.updateFromJson(badgeJson);
  assert.equal(badge.get("id"), 1126, "id is set");
  assert.equal(
    badge.get("badge_type.name"),
    "Silver 1",
    "badge_type reference is set"
  );
});

QUnit.test("save", assert => {
  assert.expect(0);
  const badge = Badge.create({
    name: "New Badge",
    description: "This is a new badge.",
    badge_type_id: 1
  });
  return badge.save(["name", "description", "badge_type_id"]);
});

QUnit.test("destroy", assert => {
  assert.expect(0);
  const badge = Badge.create({
    name: "New Badge",
    description: "This is a new badge.",
    badge_type_id: 1
  });
  badge.destroy();
  badge.set("id", 3);
  return badge.destroy();
});