public void LeaveDuringWarAgainstAllianceTest() { //when joining, a user is not only member of the new alliance, but does also share diplomatic relationship: User user1 = Mock.MockUserAndAdd(instance); //Alliance 1 User user2 = Mock.MockUserAndAdd(instance); //Alliance 2 Relation.War User user3 = Mock.MockUserAndAdd(instance); //Alliance 1 , will eave the alliance User user4 = Mock.MockUserAndAdd(instance); //Alliance 2 , Alliance.createAlliance(user1, "alliance1"); Alliance alliance1 = instance.alliances[user1.allianceId]; Alliance.createAlliance(user2, "alliance2"); Alliance alliance2 = instance.alliances[user2.allianceId]; //invite user3 Alliance.inviteTo(user1, user3); //JOIN Alliance.joinCheck(user3, alliance1.id); //invite user4 Alliance.inviteTo(user2, user4); //JOIN Alliance.joinCheck(user4, alliance2.id); UserRelations relations = instance.userRelations; // set to War: //relations.setDiplomaticEntityState(alliance1, alliance2, Relation.War); List <SpacegameServer.Core.DiplomaticRelation> changes = new List <DiplomaticRelation>(); relations.trySetRelation(user1.id, alliance2.id, alliance2.diplomaticType, Relation.War, changes); Assert.AreEqual(Relation.War, relations.getRelation(alliance1, alliance2)); //leave alliance Alliance.leaveCheck(user3, user3, user3.allianceId); Assert.AreEqual(user3.allianceId, 0); foreach (var targetRelation in Core.Instance.userRelations.getAllDiplomatics(user3, 1)) { if (targetRelation.target.id == user2.id) { Assert.AreEqual((int)Relation.War, targetRelation.relation); } if (targetRelation.target.id == user4.id) { Assert.AreEqual((int)Relation.War, targetRelation.relation); } } }
public void testTrySetRelation() { UserRelations relations = instance.userRelations; //newRelations is used by businessconnector to get all changes and make an xml of them //System.Collections.Generic.List<DiplomaticRelation> newRelations = new System.Collections.Generic.List<DiplomaticRelation>(); User u3 = Mock.MockUser(id: (int)instance.identities.allianceId.getNext()); instance.users.TryAdd(u3.id, u3); User u4 = Mock.MockUser(id: (int)instance.identities.allianceId.getNext()); instance.users.TryAdd(u4.id, u4); User u5 = Mock.MockUser(id: (int)instance.identities.allianceId.getNext()); instance.users.TryAdd(u5.id, u5); User u6 = Mock.MockUser(id: (int)instance.identities.allianceId.getNext()); instance.users.TryAdd(u6.id, u6); //relations.setDiplomaticEntityState(u3, u4, Relation.Neutral); //relations.setDiplomaticEntityState(u4, u3, Relation.Neutral); relations.setDiplomaticEntityState(u3, u4, Relation.Trade); relations.setDiplomaticEntityState(u4, u3, Relation.Pact); System.Collections.Generic.List <SpacegameServer.Core.DiplomaticRelation> changes = new System.Collections.Generic.List <SpacegameServer.Core.DiplomaticRelation>(); //cancel tradeTraty (2) -> set to 1 (neutral) relations.trySetRelation(u3.id, u4.id, u4.diplomaticType, Relation.Neutral, changes); Assert.AreEqual(Relation.Neutral, relations.getRelation(u3, u4), "(u3, u4) != 1"); Assert.AreEqual(Relation.Neutral, relations.getRelation(u4, u3), "(u4, u3) != 1"); //offer new pact relations.trySetRelation(u3.id, u4.id, u4.diplomaticType, Relation.Pact, changes); Assert.AreEqual(Relation.Neutral, relations.getRelation(u3, u4)); Assert.AreEqual(Relation.Neutral, relations.getRelation(u4, u3)); //accept trade relations.trySetRelation(u4.id, u3.id, u3.diplomaticType, Relation.Trade, changes); Assert.AreEqual(Relation.Trade, relations.getRelation(u3, u4)); Assert.AreEqual(Relation.Trade, relations.getRelation(u4, u3)); //test with alliances and more users: Assert.IsTrue(Alliance.createAlliance(u3, "a1")); Alliance a1 = instance.alliances[u3.allianceId]; Alliance.inviteTo(u3, u4); Assert.IsTrue(Alliance.joinCheck(u4, a1.id)); Assert.IsTrue(Alliance.createAlliance(u5, "a2")); Alliance a2 = instance.alliances[u5.allianceId]; relations.setDiplomaticEntityState(u5, u6, Relation.Neutral); Alliance.inviteTo(u5, u6); Assert.IsTrue(Alliance.joinCheck(u6, a2.id)); //check for diplomatic rights: Assert.IsFalse(relations.trySetRelation(u6.id, a1.id, a1.diplomaticType, Relation.Trade, changes)); //check for missing contact a2.getMemberRight(u6).diplomaticAdmin = true; //Assert.IsFalse(relations.trySetRelation(u5.id, a1.id, a1.diplomaticType, Relation.Trade, changes)); //rights are ok, contact is ok: relations.setDiplomaticEntityState(u3, u5, Relation.Neutral); relations.setDiplomaticEntityState(u5, u3, Relation.Neutral); //check that relations can only be sent to the uppermost group: Assert.IsFalse(relations.trySetRelation(u5.id, u3.id, u3.diplomaticType, Relation.Pact, changes)); //now the work can be done: a1 proposes 2 to a1 Assert.IsTrue(relations.trySetRelation(u5.id, a1.id, a1.diplomaticType, Relation.Trade, changes)); //add all other users: /* * relations.setDiplomaticEntityState(u3, u6, Relation.Neutral); * relations.setDiplomaticEntityState(u6, u3, Relation.Neutral); * relations.setDiplomaticEntityState(u4, u5, Relation.Neutral); * relations.setDiplomaticEntityState(u5, u4, Relation.Neutral); * relations.setDiplomaticEntityState(u4, u6, Relation.Neutral); * relations.setDiplomaticEntityState(u6, u4, Relation.Neutral); */ //a1 declares war a1.getMemberRight(u3).diplomaticAdmin = true; relations.trySetRelation(u3.id, a2.id, a2.diplomaticType, Relation.War, changes); Assert.AreEqual(Relation.War, relations.getRelation(a1, a2)); Assert.AreEqual(Relation.War, relations.getRelation(u3, u5)); Assert.AreEqual(Relation.War, relations.getRelation(u4, u5)); Assert.AreEqual(Relation.War, relations.getRelation(u3, u6)); Assert.AreEqual(Relation.War, relations.getRelation(u4, u6)); Assert.AreEqual(Relation.War, relations.getRelation(a2, a1), "a2, a1 -> 0"); Assert.AreEqual(Relation.War, relations.getRelation(u5, u3), "(u5, u3) -> 0"); Assert.AreEqual(Relation.War, relations.getRelation(u5, u4), "(u5, u4) -> 0"); Assert.AreEqual(Relation.War, relations.getRelation(u6, u3), "(u6, u3) -> 0"); Assert.AreEqual(Relation.War, relations.getRelation(u6, u4), "(u6, u4) -> 0"); //proposal: 4 relations.trySetRelation(u3.id, a2.id, a2.diplomaticType, Relation.Pact, changes); Assert.AreEqual(Relation.War, relations.getRelation(a1, a2)); Assert.AreEqual(Relation.War, relations.getRelation(u3, u5)); Assert.AreEqual(Relation.War, relations.getRelation(u4, u5)); Assert.AreEqual(Relation.War, relations.getRelation(u3, u6)); Assert.AreEqual(Relation.War, relations.getRelation(u4, u6)); //accepted 2 relations.trySetRelation(u5.id, a1.id, a1.diplomaticType, Relation.Trade, changes); Assert.AreEqual(Relation.Trade, relations.getRelation(a1, a2), " a1, a2 -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u3, u5), " u3, u5 -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u4, u5), " u4, u5-> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u3, u6), " u3, u6 -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u4, u6), " u4, u6 -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(a2, a1), "a2, a1 -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u5, u3), "(u5, u3) -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u5, u4), "(u5, u4) -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u6, u3), "(u6, u3) -> 2"); Assert.AreEqual(Relation.Trade, relations.getRelation(u6, u4), "(u6, u4) -> 2"); relations.trySetRelation(u5.id, a1.id, a1.diplomaticType, Relation.Pact, changes); Assert.AreEqual(Relation.Pact, relations.getRelation(a1, a2)); Assert.AreEqual(Relation.Pact, relations.getRelation(u3, u5)); Assert.AreEqual(Relation.Pact, relations.getRelation(u4, u5)); Assert.AreEqual(Relation.Pact, relations.getRelation(u3, u6)); Assert.AreEqual(Relation.Pact, relations.getRelation(u4, u6)); //test between user and alliance: User u7 = Mock.MockUser(id: (int)instance.identities.allianceId.getNext()); instance.users.TryAdd(u7.id, u7); User u8 = Mock.MockUser(id: (int)instance.identities.allianceId.getNext()); instance.users.TryAdd(u8.id, u8); relations.setDiplomaticEntityState(u7, u3, Relation.Neutral); relations.setDiplomaticEntityState(u3, u7, Relation.Neutral); relations.setDiplomaticEntityState(u8, u5, Relation.Neutral); relations.setDiplomaticEntityState(u5, u8, Relation.Neutral); relations.trySetRelation(u7.id, a1.id, a1.diplomaticType, Relation.Trade, changes); Assert.AreEqual(Relation.Neutral, relations.getRelation(a1, u7)); Assert.AreEqual(Relation.Neutral, relations.getRelation(u7, a1)); //alliance(-Member) to user relations.trySetRelation(u5.id, u8.id, u8.diplomaticType, Relation.Trade, changes); Assert.AreEqual(Relation.Neutral, relations.getRelation(u5, u8)); Assert.AreEqual(Relation.Neutral, relations.getRelation(u8, u5)); }