public void testDragoonDemotedBySoldier() {
        Map map = getTestMap(plains);
        Game game = ServerTestHelper.startServerGame(map);
        InGameController igc = ServerTestHelper.getInGameController();

        List<CombatResult> crs;
        Player dutch = game.getPlayer("model.nation.dutch");
        Player french = game.getPlayer("model.nation.french");

        Tile tile1 = map.getTile(5, 8);
        tile1.setExploredBy(dutch, true);
        tile1.setExploredBy(french, true);
        Tile tile2 = map.getTile(4, 8);
        tile2.setExploredBy(dutch, true);
        tile2.setExploredBy(french, true);
        Unit dragoon = new ServerUnit(game, tile1, dutch, colonistType, horses, muskets);
        ServerTestHelper.newTurn();

        assertEquals("Dragoon has 12 moves",
                     12, dragoon.getInitialMovesLeft());
        assertEquals("Dragoon has 12 moves left",
                     12, dragoon.getMovesLeft());
        Unit soldier = new ServerUnit(game, tile2, french, colonistType, muskets);

        // Dragoon loses and loses horses
        crs = fakeAttackResult(CombatResult.LOSE, dragoon, soldier);
        assertTrue("Dragoon v soldier (1) failed", crs.size() == 2
                   && crs.get(0) == CombatResult.LOSE
                   && crs.get(1) == CombatResult.LOSE_EQUIP);
        igc.combat((ServerPlayer) dutch, dragoon, soldier, crs);

        assertEquals("Dragoon should be a dragoon",
                     colonistType, dragoon.getType());
        assertEquals("Dragoon should be Dutch",
                     dutch, dragoon.getOwner());
        assertEquals("Dragoon should be on Tile1",
                     tile1, dragoon.getTile());
        assertEquals("Dragoon should have equipment",
                     1, dragoon.getEquipment().size());
        assertEquals("Dragoon should have muskets",
                     1, dragoon.getEquipment().getCount(muskets));
        assertEquals("Dragoon has 3 moves",
                     3, dragoon.getInitialMovesLeft());
        assertEquals("Dragoon has 0 moves left",
                     0, dragoon.getMovesLeft());

        crs = fakeAttackResult(CombatResult.LOSE, dragoon, soldier);
        assertTrue("Dragoon v soldier (2) failed", crs.size() == 2
                   && crs.get(0) == CombatResult.LOSE
                   && crs.get(1) == CombatResult.LOSE_EQUIP);
        igc.combat((ServerPlayer) dutch, dragoon, soldier, crs);

        assertEquals("Dragoon should be a dragoon",
                     colonistType, dragoon.getType());
        assertEquals("Dragoon should be Dutch",
                     dutch, dragoon.getOwner());
        assertEquals("Dragoon should be on Tile1",
                     tile1, dragoon.getTile());
        assertTrue("Dragoon should have no equipment",
                   dragoon.getEquipment().isEmpty());

        crs = fakeAttackResult(CombatResult.LOSE, dragoon, soldier);
        assertTrue("Dragoon v soldier (3) failed", crs.size() == 2
                   && crs.get(0) == CombatResult.LOSE
                   && crs.get(1) == CombatResult.CAPTURE_UNIT);
        igc.combat((ServerPlayer) dutch, dragoon, soldier, crs);

        assertEquals("Dragoon should be demoted",
                     colonistType, dragoon.getType());
        assertEquals("Dragoon should be French",
                     french, dragoon.getOwner());
        assertEquals("Dragoon should be on Tile2",
                     tile2, dragoon.getTile());
    }