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

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

Added SAOP and simplerunner to GeniusWebPython. Several minor fixes.

File size: 4.0 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 testBidSimple(self):
69 issuevalues = {}
70 Bid(issuevalues) # no issues, no values should be ok
71
72 def testBidNull(self):
73 issuevalues = {}
74 issuevalues[self.ISSUE1]=None
75 self.assertRaises(ValueError, lambda:Bid(issuevalues)) # smokes
76
77 def testbidOkIssueValue(self):
78 issuevalues = OrderedDict()
79 issuevalues[self.ISSUE1]=Mock(Value)
80 Bid(issuevalues) # shouldn't smoke
81
82 def testSerialize(self) :
83 jackson = ObjectMapper()
84 print(str(jackson.toJson(self.bid)))
85 self.assertEqual(json.loads(self.asString1), jackson.toJson(self.bid))
86
87 def testDeserialize(self) :
88 jackson = ObjectMapper()
89 read = jackson.parse(json.loads(self.asString1), Bid)
90 self.assertEquals(self.bid, read)
91
92 def testMerge(self):
93 issuevalues = {}
94 issuevalues[self.ISSUE1]= self.VALUE1
95 partial1 = Bid(issuevalues)
96
97 issuevalues = {}
98 issuevalues[self.ISSUE2]= self.VALUE2
99 partial2 = Bid(issuevalues)
100
101 mergedbid = partial1.merge(partial2)
102 self.assertEqual(self.bidc, mergedbid)
103
104 def testMergeIssuesOverlap(self):
105 issuevalues = {}
106 issuevalues[self.ISSUE1]=self.VALUE1
107 partial1 = Bid(issuevalues)
108
109 issuevalues = {}
110 issuevalues[self.ISSUE1]=self.VALUE2
111 partial2 = Bid(issuevalues)
112
113 self.assertRaises(ValueError, lambda:partial1.merge(partial2))
114
115 def testSmokeConstructor2(self):
116 Bid({"issue": DiscreteValue("dss")})
117
118 def testSmokeConstructor2b(self):
119 Bid({"issue": NumberValue(Decimal("0.5"))})
120
121 def testSmokeConstructor2Null1(self):
122 self.assertRaises(ValueError, lambda:Bid({None: DiscreteValue("dss")}))
123
124 def testSmokeConstructor2Null2(self):
125 self.assertRaises(ValueError, lambda: Bid({"issue": None}))
126
Note: See TracBrowser for help on using the repository browser.