source: geniuswebcore/test/geniusweb/issuevalue/BidTest.py@ 75

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

Fix for IssueValue hashcode.

File size: 4.1 KB
Line 
1from collections import OrderedDict
2from decimal import Decimal
3import json
4from typing import List, Dict
5import unittest
6from unittest.mock import Mock
7
8from pyson.ObjectMapper import ObjectMapper
9from unitpy.GeneralTests import GeneralTests
10
11from geniusweb.issuevalue.Bid import Bid
12from geniusweb.issuevalue.DiscreteValue import DiscreteValue
13from geniusweb.issuevalue.NumberValue import NumberValue
14from geniusweb.issuevalue.Value import Value
15
16
17class BidTest (unittest.TestCase, GeneralTests[Bid]):
18
19 asString1 = "{\"issuevalues\":{\"issue3\":901234567.89,\"issue2\":1,\"issue1\":\"b\"}}"
20 ISSUE1 = "issue1"
21 VALUE1:Value = DiscreteValue("value1")
22 ISSUE2 = "issue2"
23 VALUE2:Value = NumberValue(Decimal("10"))
24 list:List[List[Bid]] = []
25
26 issuevalues:Dict[str, Value] = OrderedDict()
27 issuevalues["issue3"]= NumberValue(Decimal("901234567.89"))
28 issuevalues[ISSUE2]= NumberValue(Decimal(1))
29 issuevalues[ISSUE1]= DiscreteValue("b")
30 bid = Bid(issuevalues);
31
32 # different order but that shouldn't matter
33 issuevalues1:Dict[str, Value] = OrderedDict()
34 issuevalues1["issue3"]= NumberValue(Decimal("901234567.89"))
35 issuevalues1[ISSUE2]= NumberValue(Decimal(1))
36 issuevalues1[ISSUE1]= DiscreteValue("b")
37 bid1 = Bid(issuevalues1)
38
39 issuevaluesb:Dict[str, Value] = OrderedDict()
40 issuevaluesb[ISSUE2]= NumberValue(Decimal(1))
41 issuevaluesb[ISSUE1]= DiscreteValue("b")
42 bidb = Bid(issuevaluesb)
43
44 # bidc and bidd have values swapped, so different issuevalues.
45 issuevaluesc:Dict[str, Value] = OrderedDict()
46 issuevaluesc[ISSUE2]=VALUE2
47 issuevaluesc[ISSUE1]= VALUE1
48 bidc = Bid(issuevaluesc)
49
50 list.append([bid, bid1])
51 list.append([bidb])
52 list.append([bidc])
53
54 def getGeneralTestData(self)->List[List[Bid]] :
55 return self.list
56
57 def getGeneralTestStrings(self)->List[str] :
58 return [
59 "Bid\\{issue3=901234567.89, issue2=1, issue1=\"b\"\\}",
60 "Bid\\{issue2=1, issue1=\"b\"\\}",
61 "Bid\\{issue2=10, issue1=\"value1\"\\}"]
62
63
64 def testNullConstructor(self):
65 issuevalues = None;
66 self.assertRaises(ValueError, lambda: Bid(issuevalues))
67
68 def testUnkownIssue(self):
69 self.assertEqual(None, self.bid.getValue("NotAnIssue"))
70
71 def testBidSimple(self):
72 issuevalues = {}
73 Bid(issuevalues) # no issues, no values should be ok
74
75 def testBidNull(self):
76 issuevalues = {}
77 issuevalues[self.ISSUE1]=None
78 self.assertRaises(ValueError, lambda:Bid(issuevalues)) # smokes
79
80 def testbidOkIssueValue(self):
81 issuevalues = OrderedDict()
82 issuevalues[self.ISSUE1]=Mock(Value)
83 Bid(issuevalues) # shouldn't smoke
84
85 def testSerialize(self) :
86 jackson = ObjectMapper()
87 print(str(jackson.toJson(self.bid)))
88 self.assertEqual(json.loads(self.asString1), jackson.toJson(self.bid))
89
90 def testDeserialize(self) :
91 jackson = ObjectMapper()
92 read = jackson.parse(json.loads(self.asString1), Bid)
93 self.assertEquals(self.bid, read)
94
95 def testMerge(self):
96 issuevalues = {}
97 issuevalues[self.ISSUE1]= self.VALUE1
98 partial1 = Bid(issuevalues)
99
100 issuevalues = {}
101 issuevalues[self.ISSUE2]= self.VALUE2
102 partial2 = Bid(issuevalues)
103
104 mergedbid = partial1.merge(partial2)
105 self.assertEqual(self.bidc, mergedbid)
106
107 def testMergeIssuesOverlap(self):
108 issuevalues = {}
109 issuevalues[self.ISSUE1]=self.VALUE1
110 partial1 = Bid(issuevalues)
111
112 issuevalues = {}
113 issuevalues[self.ISSUE1]=self.VALUE2
114 partial2 = Bid(issuevalues)
115
116 self.assertRaises(ValueError, lambda:partial1.merge(partial2))
117
118 def testSmokeConstructor2(self):
119 Bid({"issue": DiscreteValue("dss")})
120
121 def testSmokeConstructor2b(self):
122 Bid({"issue": NumberValue(Decimal("0.5"))})
123
124 def testSmokeConstructor2Null1(self):
125 self.assertRaises(ValueError, lambda:Bid({None: DiscreteValue("dss")}))
126
127 def testSmokeConstructor2Null2(self):
128 self.assertRaises(ValueError, lambda: Bid({"issue": None}))
129
Note: See TracBrowser for help on using the repository browser.