source: geniuswebcore/test/geniusweb/protocol/session/mopac/PartyStatesTest.py@ 73

Last change on this file since 73 was 73, checked in by Bart Vastenhouw, 3 years ago

Fix for IssueValue hashcode.

File size: 2.7 KB
Line 
1import json
2from typing import List, Dict
3import unittest
4
5from pyson.ObjectMapper import ObjectMapper
6from unitpy.GeneralTests import GeneralTests
7
8from geniusweb.actions.PartyId import PartyId
9from geniusweb.inform.Agreements import Agreements
10from geniusweb.protocol.ProtocolException import ProtocolException
11from geniusweb.protocol.session.mopac.PartyStates import PartyStates
12
13
14class PartyStatesTest (unittest.TestCase, GeneralTests[PartyStates]):
15 jackson = ObjectMapper()
16
17 party1 = PartyId("party1")
18 party2 = PartyId("party2")
19 party3 = PartyId("party3")
20
21 powers:Dict[PartyId, int] = {}
22 serialized = "{\"notYetActed\":[\"party2\",\"party1\",\"party3\"],\"actions\":[],\"agreements\":{},\"walkedAway\":[],\"exceptions\":{},\"powers\":{\"party2\":3,\"party1\":2,\"party3\":3}}";
23
24
25 powers[party1]= 2
26 powers[party2]=3
27 states2 = PartyStates(powers)
28 powers[party3]= 3
29 states1 = PartyStates(powers)
30 states1a = PartyStates(powers)
31
32 def getGeneralTestData(self)->List[List[PartyStates]] :
33 return [[self.states1, self.states1a],
34 [self.states2]]
35
36 def getGeneralTestStrings(self)->List[str] :
37 return [
38 "PartyStates.*\\[party., party., party.\\],\\[\\],Agreements\\{\\},\\[\\],\\{\\}.*",
39 "PartyStates.*\\[party., party.\\],\\[\\],Agreements\\{\\},\\[\\],\\{\\}.*"]
40
41 def testBasics(self):
42 self.assertEqual(self.powers.keys(), self.states1.getNegotiatingParties())
43 self.assertEqual(self.powers.keys(), self.states1.getNotYetActed());
44 self.assertEqual(0, len(self.states1.getExceptions()))
45
46 def testException(self):
47 newstates = self.states1\
48 .WithException(ProtocolException("bla", self.party1))
49 self.assertEqual(Agreements(), newstates.getAgreements())
50 self.assertEqual(self.powers.keys(), self.states1.getNegotiatingParties())
51 self.assertEqual(set([self.party2, self.party3]),
52 newstates.getNotYetActed())
53
54 def testFinish(self):
55 newstates = self.states1.finish()
56 self.assertEqual(Agreements(), newstates.getAgreements())
57 self.assertEqual(self.powers.keys(), self.states1.getNegotiatingParties())
58 self.assertEqual(set(), newstates.getNotYetActed())
59
60 def testDeserialize(self):
61 obj = self.jackson.parse(json.loads(self.serialized), PartyStates)
62 print(obj)
63 self.assertEqual(self.states1, obj)
64
65 def testSerialize(self):
66 jsonobj = self.jackson.toJson(self.states1)
67 print(jsonobj);
68 jsonloads=json.loads(self.serialized)
69 # BRUTE HACK workaround set ordering
70 jsonloads['notYetActed']=jsonobj['notYetActed']
71 self.assertEqual(jsonloads, jsonobj)
72
73 def testWalkAway(self):
74 walkawaystate = self.states1.WithWalkAway(self.party2)
75 self.assertEqual(set([self.party1, self.party3]),
76 walkawaystate.getNotYetActed())
77 self.assertEqual([self.party2], walkawaystate.getWalkedAway())
Note: See TracBrowser for help on using the repository browser.