1 | from collections import OrderedDict
|
---|
2 | import json
|
---|
3 | from typing import List, Dict
|
---|
4 | import unittest
|
---|
5 |
|
---|
6 | from pyson.ObjectMapper import ObjectMapper
|
---|
7 | from unitpy.GeneralTests import GeneralTests
|
---|
8 | from uri.uri import URI
|
---|
9 |
|
---|
10 | from geniusweb.actions.PartyId import PartyId
|
---|
11 | from geniusweb.inform.Agreements import Agreements
|
---|
12 | from geniusweb.issuevalue.Bid import Bid
|
---|
13 | from geniusweb.issuevalue.DiscreteValue import DiscreteValue
|
---|
14 | from geniusweb.issuevalue.Value import Value
|
---|
15 | from geniusweb.protocol.session.SessionResult import SessionResult
|
---|
16 | from geniusweb.references.Parameters import Parameters
|
---|
17 | from geniusweb.references.PartyRef import PartyRef
|
---|
18 | from geniusweb.references.PartyWithParameters import PartyWithParameters
|
---|
19 | from geniusweb.references.PartyWithProfile import PartyWithProfile
|
---|
20 | from geniusweb.references.ProfileRef import ProfileRef
|
---|
21 |
|
---|
22 |
|
---|
23 | class SessionResultTest(unittest.TestCase, GeneralTests[SessionResult]):
|
---|
24 | jackson = ObjectMapper()
|
---|
25 | error = ValueError("test");
|
---|
26 |
|
---|
27 | ISSUE1 = "issue1";
|
---|
28 | jsonstring = "{\"participants\":{\"party2\":{\"party\":{\"partyref\":\"party2\",\"parameters\":{}},\"profile\":\"profile2\"},\"party1\":{\"party\":{\"partyref\":\"party1\",\"parameters\":{}},\"profile\":\"profile1\"}},\"agreements\":{\"party2\":{\"issuevalues\":{\"issue1\":\"a\"}},\"party1\":{\"issuevalues\":{\"issue1\":\"a\"}}},\"penalties\":{\"party2\":0.0,\"party1\":0.0},\"error\":null}";
|
---|
29 | nopenalties:Dict[PartyId, float] = {}
|
---|
30 | penalties:Dict[PartyId, float] = {}
|
---|
31 |
|
---|
32 | PARTY1 = PartyId("party1")
|
---|
33 | PARTY2 = PartyId("party2")
|
---|
34 | PARTY3 = PartyId("party3")
|
---|
35 |
|
---|
36 | penalties[PARTY1]= 0.1
|
---|
37 | penalties[PARTY2]= 0.2
|
---|
38 | nopenalties[PARTY1]= 0.
|
---|
39 | nopenalties[PARTY2]= 0.
|
---|
40 |
|
---|
41 | errorstring = "\"error\":{\"java.lang.RuntimeException\":"\
|
---|
42 | + json.dumps(jackson.toJson(error)) + "}"
|
---|
43 | print(errorstring)
|
---|
44 |
|
---|
45 | party1 = PartyWithParameters(PartyRef(URI("party1")), Parameters())
|
---|
46 | party2 = PartyWithParameters(PartyRef(URI("party2")), Parameters())
|
---|
47 |
|
---|
48 | partyprofile1 = PartyWithProfile(party1, ProfileRef(URI("profile1")))
|
---|
49 | partyprofile2 = PartyWithProfile(party2, ProfileRef(URI("profile2")))
|
---|
50 |
|
---|
51 | issuevalues1:Dict[str, Value] = {}
|
---|
52 | issuevalues1[ISSUE1]=DiscreteValue("a")
|
---|
53 | bid1 = Bid(issuevalues1)
|
---|
54 | agreement1 = Agreements().With(Agreements({PARTY1:bid1, PARTY2:bid1} ))
|
---|
55 |
|
---|
56 | # different order but that shouldn't matter
|
---|
57 | issuevalues2:Dict[str, Value] =OrderedDict()
|
---|
58 | issuevalues2[ISSUE1]= DiscreteValue("b")
|
---|
59 | bid2 = Bid(issuevalues2)
|
---|
60 | agreement2 = Agreements().With(Agreements({ PARTY1:bid2, PARTY3:bid2} ))
|
---|
61 |
|
---|
62 | partiesmap:Dict[PartyId, PartyWithProfile] = OrderedDict()
|
---|
63 | partiesmap[PARTY2]= partyprofile2
|
---|
64 | partiesmap[PARTY1]= partyprofile1
|
---|
65 |
|
---|
66 | partiesmap2:Dict[PartyId, PartyWithProfile] = OrderedDict()
|
---|
67 | partiesmap2[PARTY1]= partyprofile2
|
---|
68 | partiesmap2[PARTY3]= partyprofile1
|
---|
69 |
|
---|
70 | result1 = SessionResult(partiesmap, agreement1, nopenalties, None)
|
---|
71 | result1a = SessionResult(partiesmap, agreement1, nopenalties, None)
|
---|
72 | result2 = SessionResult(partiesmap, agreement2, nopenalties, None)
|
---|
73 | result3 = SessionResult(partiesmap2, agreement1, nopenalties, None)
|
---|
74 | result4 = SessionResult(partiesmap2, agreement1, penalties, None)
|
---|
75 |
|
---|
76 | # IGNORE ERROR for now, it fails somewhere deep in maven suddenly.
|
---|
77 | # result4 = new SessionResult(Arrays.asList(partyprofile1,
|
---|
78 | # partyprofile2), bid1, error);
|
---|
79 |
|
---|
80 | def getGeneralTestData(self) ->List[List[SessionResult]]:
|
---|
81 | return [[self.result1, self.result1a],
|
---|
82 | [self.result2], [self.result3],
|
---|
83 | [self.result4]]
|
---|
84 |
|
---|
85 | def getGeneralTestStrings(self) -> List[str]:
|
---|
86 | return [
|
---|
87 | "SessionResult.*party2.*profile2.*,.*party1.*profile1.*Agreements.*Bid.*issue1=\"a\".*0\\.0.*0\\.0.*None.*",
|
---|
88 | "SessionResult.*party2.*profile2.*,.*party1.*profile1.*Agreements.*Bid.*issue1=\"b\".*0\\.0.*0\\.0.*None.*",
|
---|
89 | "SessionResult.*party1.*profile2.*,.*party3.*profile1.*Agreements.*Bid.*issue1=\"a\".*0\\.0.*0\\.0.*None.*",
|
---|
90 | "SessionResult.*party1.*profile2.*,.*party3.*profile1.*Agreements.*Bid.*issue1=\"a\".*party1.*0\\.1.*party2.*0\\.2.*None.*"
|
---|
91 | ]
|
---|
92 |
|
---|
93 | def serializeTest(self) :
|
---|
94 | print(self.jackson.toJson(self.result1))
|
---|
95 | self.assertEqual(json.loads(self.jsonstring), self.jackson.toJson(self.result1))
|
---|
96 |
|
---|
97 | def deserializeTest(self):
|
---|
98 | act = self.jackson.parse(json.loads(self.jsonstring), SessionResult)
|
---|
99 | self.assertEqual(self.result1, act)
|
---|
100 |
|
---|