def test_init_world(self):
    events = Events([])
    game = MagnumSal(events)

    game.add_chamber(0, 0)

    self.assertEqual([ChamberAdded(0, 0)], events)
  def test_we_cannot_remove_a_non_existent_miner(self):
    events = Events([
      ChamberAdded(0, 0),
    ])

    game = MagnumSal(events)

    self.assertRaises(ApplicationException,
                      lambda: game.miner_removal_service.remove_miner(0, 0))
    self.assertEqual([], events.filter(MinerRemoved))
  def test_we_cannot_place_a_miner_outside_of_a_chamber(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
    ])

    game = MagnumSal(events)

    self.assertRaises(ApplicationException, lambda: game.miner_placement_service.place_miner(-1, 0))
    self.assertNotIn(MinerPlaced(-1, 0), events)
    self.assertEqual([], events.filter(MinerPlaced))
  def test_we_can_remove_the_first_miner(self):
    events = Events([
      ChamberAdded(0, 0),
      MinerPlaced(0, 0),
    ])

    game = MagnumSal(events)

    game.miner_removal_service.remove_miner(0, 0)

    self.assertIn(MinerRemoved(0, 0), events)
  def test_place_miner_at_start_of_mine(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
    ])

    game = MagnumSal(events)

    game.miner_placement_service.place_miner(0, 0)

    self.assertIn(MinerPlaced(0, 0), events)
  def test_we_cannot_remove_first_miner_if_there_is_a_second_miner(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
    ])

    game = MagnumSal(events)

    self.assertRaises(ApplicationException,
                      lambda: game.miner_removal_service.remove_miner(0, 0))
  def test_we_cannot_place_a_miner_somewhere_without_neighbors(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      MinerPlaced(0, 0),
    ])

    game = MagnumSal(events)

    self.assertRaises(
      ApplicationException, lambda: game.miner_placement_service.place_miner(0, 2))
    self.assertNotIn(MinerPlaced(0, 2), events)
  def test_we_cannot_remove_a_previously_removed_miner(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerRemoved(0, 1),
    ])

    game = MagnumSal(events)

    self.assertRaises(ApplicationException,
                      lambda: game.miner_removal_service.remove_miner(0, 1))
    self.assertEqual([MinerRemoved(0, 1)], events.filter(MinerRemoved))
  def test_we_place_a_miner_deeply_in_the_shaft_next_to_a_neighbor(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      ChamberAdded(1, 2),
      MinerPlaced(0, 1),
      MinerPlaced(0, 2),
    ])

    game = MagnumSal(events)

    game.miner_placement_service.place_miner(1, 2)
    self.assertIn(MinerPlaced(1, 2), events)
Exemplo n.º 10
0
  def test_cannot_place_a_miner_after_a_chamber_where_the_last_miner_was_removed(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerRemoved(0, 1),
    ])

    game = MagnumSal(events)

    self.assertRaises(ApplicationException,
                      lambda: game.miner_placement_service.place_miner(0, 2))
Exemplo n.º 11
0
  def test_we_can_remove_a_removed_and_readded_miner(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerRemoved(0, 1),
      MinerPlaced(0, 1),
    ])

    game = MagnumSal(events)

    game.miner_removal_service.remove_miner(0, 1)

    self.assertEqual([MinerRemoved(0, 1), MinerRemoved(0, 1)], events.filter(MinerRemoved))
Exemplo n.º 12
0
  def test_can_place_a_miner_after_a_chamber_where_the_last_miner_was_replaced(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerRemoved(0, 1),
      MinerPlaced(0, 1),
    ])

    game = MagnumSal(events)

    game.miner_placement_service.place_miner(0, 2)

    self.assertIn(MinerPlaced(0, 2), events)
Exemplo n.º 13
0
  def test_we_can_remove_a_neighbor_in_the_middle_of_a_chain_if_the_chain_does_not_break(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerPlaced(0, 1),
      MinerPlaced(0, 2),
    ])

    game = MagnumSal(events)

    game.miner_removal_service.remove_miner(0, 1)

    self.assertEqual([MinerRemoved(0, 1)], events.filter(MinerRemoved))
Exemplo n.º 14
0
  def test_we_cannot_remove_a_neighbor_in_the_middle_of_a_chain(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerPlaced(0, 2),
    ])

    game = MagnumSal(events)

    self.assertRaises(ApplicationException,
                      lambda: game.miner_removal_service.remove_miner(0, 1))

    self.assertNotIn(MinerRemoved(0, 1), events.filter(MinerRemoved))
Exemplo n.º 15
0
  def test_we_can_remove_the_last_miner_in_a_chain(self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerPlaced(-1, 1),
      MinerPlaced(0, 2),
    ])

    game = MagnumSal(events)

    game.miner_removal_service.remove_miner(-1, 1)

    self.assertIn(MinerRemoved(-1, 1), events.filter(MinerRemoved))
Exemplo n.º 16
0
  def test_we_cannot_remove_a_neighbor_in_the_middle_of_a_chain_if_the_chain_breaks_with_removals_taken_into_account(
      self):
    events = Events([
      ChamberAdded(0, 0),
      ChamberAdded(0, 1),
      ChamberAdded(0, 2),
      MinerPlaced(0, 0),
      MinerPlaced(0, 1),
      MinerPlaced(0, 1),
      MinerPlaced(0, 2),
      MinerRemoved(0, 1),
    ])

    game = MagnumSal(events)

    self.assertRaises(ApplicationException,
                      lambda: game.miner_removal_service.remove_miner(0, 1))

    self.assertEqual([MinerRemoved(0, 1)], events.filter(MinerRemoved))