from datetime import datetime import json import unittest from pyson.ObjectMapper import ObjectMapper from uri.uri import URI from geniusweb.actions.PartyId import PartyId from geniusweb.actions.Vote import Vote from geniusweb.actions.Votes import Votes from geniusweb.inform.Inform import Inform from geniusweb.inform.OptIn import OptIn from geniusweb.issuevalue.Bid import Bid from geniusweb.issuevalue.DiscreteValue import DiscreteValue from unitpy.GeneralTests import GeneralTests from typing import List class OptInTest(unittest.TestCase, GeneralTests[OptIn]): maxDiff = None bid1 = Bid({"iss": DiscreteValue("val1")}) bid2 = Bid({"iss": DiscreteValue("val2")}) partyA = PartyId("partyA") partyB = PartyId("partyB") voteA1 = Vote(partyA, bid1, 2, 9) voteB1 = Vote(partyB, bid1, 2, 9) voteB2 = Vote(partyB, bid2, 2, 9) votesA = Votes(partyA, set([voteA1])) votesB = Votes(partyB,set([voteB1, voteB2])) optIn1 = OptIn([votesA, votesB]) optIn1a = OptIn([votesA, votesB]) optIn2 = OptIn([votesA]) jackson = ObjectMapper(); asJson="{\"OptIn\":{\"votes\":[{\"Votes\":{\"actor\":\"partyA\",\"votes\":[{\"Vote\":{\"actor\":\"partyA\",\"bid\":{\"issuevalues\":{\"iss\":\"val1\"}},\"minPower\":2,\"maxPower\":9}}]}},{\"Votes\":{\"actor\":\"partyB\",\"votes\":[{\"Vote\":{\"actor\":\"partyB\",\"bid\":{\"issuevalues\":{\"iss\":\"val2\"}},\"minPower\":2,\"maxPower\":9}},{\"Vote\":{\"actor\":\"partyB\",\"bid\":{\"issuevalues\":{\"iss\":\"val1\"}},\"minPower\":2,\"maxPower\":9}}]}}]}}" def getGeneralTestData(self) -> List[List[OptIn]] : return [[self.optIn1, self.optIn1a], [self.optIn2]] def getGeneralTestStrings(self) -> List[str]: return ["OptIn.*Votes.*Vote.*partyA.*iss.*val1.*2.*Votes.*Vote.*partyB.*iss.*val2.*.*2.*Vote.*partyB.*iss.*val1.*2.*", "OptIn.*Votes.*Vote.*partyA.*iss.*val.*2.*"] def testSerialize(self): jsonstruct = self.jackson.toJson(self.optIn1) print(jsonstruct) # test does not work, python keeps changing the field order... # self.assertEqual(self.bla, jsonstruct) def testDeserialize(self): p = self.jackson.parse(json.loads(self.asJson), Inform) print(p); self.assertEqual(self.optIn1, p) def testOneVotePerParty(self): self.assertRaises(ValueError, lambda: OptIn([self.votesA, self.votesA]))