import json import unittest from pyson.ObjectMapper import ObjectMapper from geniusweb.issuevalue.Bid import Bid from geniusweb.issuevalue.DiscreteValue import DiscreteValue from geniusweb.issuevalue.DiscreteValueSet import DiscreteValueSet from geniusweb.issuevalue.Domain import Domain from geniusweb.issuevalue.NumberValue import NumberValue class DomainTest (unittest.TestCase) : pyson=ObjectMapper() # test value as in java GeniusWeb jobsstring = '{"name":"jobs",' \ + '"issuesValues":{' \ + '"lease car":{"values":["yes","no"]},' \ + '"permanent contract":{"values":["yes","no"]},' \ + '"career development opportunities":{"values":["low","medium","high"]},' \ + '"fte":{"values":["0.6","0.8","1.0"]},' \ + '"salary":{"values":["2000","2500","3000","3500","4000"]},' \ + '"work from home":{"values":["0","1","2"]}}}' jobsjson = json.loads(jobsstring) yesno = DiscreteValueSet([DiscreteValue("yes"), DiscreteValue("no")]) leasecarvals = yesno permcontractvals = yesno carreervals=DiscreteValueSet([DiscreteValue("low"),DiscreteValue("medium"),DiscreteValue("high")]) ftevals=DiscreteValueSet([DiscreteValue("0.6"),DiscreteValue("0.8"),DiscreteValue("1.0")]) salaryvals=DiscreteValueSet([DiscreteValue("2000"),DiscreteValue("2500"),DiscreteValue("3000"),DiscreteValue("3500"),DiscreteValue("4000")]) workfromhomevals=DiscreteValueSet([DiscreteValue("0"),DiscreteValue("1"),DiscreteValue("2")]) jobs = Domain("jobs", {"lease car":leasecarvals, "permanent contract":permcontractvals, \ "career development opportunities":carreervals, "fte":ftevals, \ "salary": salaryvals, "work from home": workfromhomevals }) jobs1 = Domain("jobs", {"lease car":leasecarvals, "permanent contract":permcontractvals, \ "career development opportunities":carreervals, "fte":ftevals, \ "salary": salaryvals, "work from home": workfromhomevals }) jobs2 = Domain("jobs2", {"lease car":leasecarvals, "permanent contract":permcontractvals, \ "career development opportunities":carreervals, "fte":ftevals, \ "salary": salaryvals, "work from home": workfromhomevals }) jobs3 = Domain("jobs", {"Lcar":leasecarvals, "permanent contract":permcontractvals, \ "career development opportunities":carreervals, "fte":ftevals, \ "salary": salaryvals, "work from home": workfromhomevals }) def testSerialize(self): print(str(self.pyson.toJson(self.jobs))) self.assertEqual(self.jobsjson,self.pyson.toJson(self.jobs)) def testDeserializeJobs(self): self.assertEqual(self.jobs, self.pyson.parse(self.jobsjson, Domain)) def testIsFitting(self): self.assertEqual(None,self.jobs.isFitting(Bid({"lease car":DiscreteValue("no")}))) self.assertTrue("illegal value maybe" in self.jobs.isFitting(Bid({"lease car":DiscreteValue("maybe")}))) def testRepr(self): self.assertEqual("Domain[jobs,{'lease car': DiscreteValueSet[yes, no], 'permanent contract': DiscreteValueSet[yes, no], 'career development opportunities': DiscreteValueSet[low, medium, high], 'fte': DiscreteValueSet[0.6, 0.8, 1.0], 'salary': DiscreteValueSet[2000, 2500, 3000, 3500, 4000], 'work from home': DiscreteValueSet[0, 1, 2]}]", \ repr(self.jobs)) def testEqual(self): self.assertEqual(self.jobs, self.jobs1) self.assertNotEqual(self.jobs, self.jobs2) self.assertNotEqual(self.jobs, self.jobs3) self.assertNotEqual(self.jobs2, self.jobs3) self.assertEqual(hash(self.jobs), hash(self.jobs1)) self.assertNotEqual(hash(self.jobs), hash(self.jobs2))