@Test
  public void holdsSnipersInAdditionOrder() {
    AuctionSniper sniper2 = new AuctionSniper(new Item("item 1", 345), null);
    context.checking(
        new Expectations() {
          {
            ignoring(listener);
          }
        });

    model.sniperAdded(sniper);
    model.sniperAdded(sniper2);

    assertEquals(ITEM_ID, cellValue(0, Column.ITEM_IDENTIFIER));
    assertEquals("item 1", cellValue(1, Column.ITEM_IDENTIFIER));
  }
  @Test
  public void updatesCorrectRowForSniper() {
    AuctionSniper sniper2 = new AuctionSniper(new Item("item 1", 345), null);
    context.checking(
        new Expectations() {
          {
            allowing(listener).tableChanged(with(anyInsertionEvent()));

            one(listener).tableChanged(with(aChangeInRow(1)));
          }
        });

    model.sniperAdded(sniper);
    model.sniperAdded(sniper2);

    SniperSnapshot winning1 = sniper2.getSnapshot().winning(123);
    model.sniperStateChanged(winning1);

    assertRowMatchesSnapshot(1, winning1);
  }
  @Test
  public void acceptsNewSniper() {
    context.checking(
        new Expectations() {
          {
            one(listener).tableChanged(with(anInsertionAtRow(0)));
          }
        });

    model.sniperAdded(sniper);

    assertRowMatchesSnapshot(0, SniperSnapshot.joining(ITEM_ID));
  }
  @Test
  public void notifiesListenersWhenAddingASniper() {
    context.checking(
        new Expectations() {
          {
            one(listener).tableChanged(with(anInsertionAtRow(0)));
          }
        });

    assertEquals(0, model.getRowCount());

    model.sniperAdded(sniper);

    assertEquals(1, model.getRowCount());
    assertRowMatchesSnapshot(0, SniperSnapshot.joining(ITEM_ID));
  }
  @Test
  public void setsSniperValuesInColumns() {
    SniperSnapshot bidding = sniper.getSnapshot().bidding(555, 666);
    context.checking(
        new Expectations() {
          {
            allowing(listener).tableChanged(with(anyInsertionEvent()));

            one(listener).tableChanged(with(aChangeInRow(0)));
          }
        });

    model.sniperAdded(sniper);
    model.sniperStateChanged(bidding);

    assertRowMatchesSnapshot(0, bidding);
  }