def test_RequireThat_WorklistRequest_ReturnsLongStrings_WhenSet(self):
        self._server._worklist_config_provider.reset()
        self._server._worklist_values["rateOfCleanExams"] = 0
        self._server._worklist_values["delayEnabled"] = False

        self._server._worklist_values["oversizedStringsEnabled"] = True
        self._server._worklist_values["emptyStringsEnabled"] = False
        self._server._worklist_values["noneStringsEnabled"] = False

        self._server._worklist_values["likelihoodOfLongString"] = 100.0

        client = worklist_client.WorklistClient(self._server_config.network_address)

        query_dataset = Dataset()
        query_dataset.PatientName = '*'


        worklist = client.get_worklist(query_dataset)
        worklist_item = worklist[0]

        self.assertTrue(len(worklist_item.CurrentPatientLocation) > 64)

        self._server._worklist_values["oversizedStringsEnabled"] = False

        worklist = client.get_worklist(query_dataset)
        worklist_item = worklist[0]

        self.assertTrue(len(worklist_item.CurrentPatientLocation) <= 64)

        self._server._worklist_config_provider.reset()
    def test_RequireThat_WorklistRequest_ReturnsCleanWorklist_WhenSet(self):
        self._server._worklist_config_provider.reset()
        self._server._worklist_values["delayEnabled"] = False
        self._server._worklist_values["rateOfCleanExams"] = 1

        client = worklist_client.WorklistClient(self._server_config.network_address)

        query_dataset = Dataset()
        query_dataset.PatientName = '*'


        worklist = client.get_worklist(query_dataset)
        worklist_item = worklist[0]

        self.assertEqual((worklist_item.PatientName), 'Clean^Exam')

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["delayEnabled"] = False
        self._server._worklist_values["rateOfCleanExams"] = 0

        worklist = client.get_worklist(query_dataset)
        worklist_item = worklist[0]

        self.assertNotEqual((worklist_item.PatientName), 'Clean^Exam')
        self._server._worklist_config_provider.reset()
    def test_RequireThat_MultipleWorklistRequests_ReturnsIdenticalWorklists_ByUseOfSeed(self):
        client = worklist_client.WorklistClient(self._server_config.network_address)

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["delayEnabled"] = False
        query_dataset = Dataset()
        query_dataset.PatientName = '*'

        seed = random.randrange(1000)

        random.seed(seed)
        worklist_one = client.get_worklist(query_dataset)

        random.seed(seed)
        worklist_two = client.get_worklist(query_dataset)

        exam = random.randrange(len(worklist_one))

        worklist_item_one = worklist_one[exam]
        worklist_item_two = worklist_two[exam]

        tags = [
            "StudyInstanceUID",
            "Modality",
            "SpecificCharacterSet",
            "AccessionNumber",
            "PatientBirthDate",
            "PatientName",
            "PatientID",
            "IssuerOfPatientID",
            "PatientWeight",
            "PatientSize",
            "AdmissionID",
            "RequestedProcedureID",
            "RequestedProcedureDescription"
        ]

        for tag in tags:
            self.assertEqual(worklist_item_one[tag], worklist_item_two[tag])

        for i in range(len(worklist_item_one.OtherPatientIDsSequence)):
            self.assertEqual(worklist_item_one.OtherPatientIDsSequence[i].PatientID, worklist_item_two.OtherPatientIDsSequence[i].PatientID)
            self.assertEqual(worklist_item_one.OtherPatientIDsSequence[i].IssuerOfPatientID, worklist_item_two.OtherPatientIDsSequence[i].IssuerOfPatientID)
            self.assertEqual(worklist_item_one.OtherPatientIDsSequence[i].TypeOfPatientID, worklist_item_two.OtherPatientIDsSequence[i].TypeOfPatientID)

        for i in range(len(worklist_item_one.ScheduledProcedureStepSequence)):
            self.assertEqual(worklist_item_one.ScheduledProcedureStepSequence[i].ScheduledPerformingPhysicianName, worklist_item_two.ScheduledProcedureStepSequence[i].ScheduledPerformingPhysicianName)
            self.assertEqual(worklist_item_one.ScheduledProcedureStepSequence[i].ScheduledProcedureStepStartDate, worklist_item_two.ScheduledProcedureStepSequence[i].ScheduledProcedureStepStartDate)
            self.assertEqual(worklist_item_one.ScheduledProcedureStepSequence[i].ScheduledProcedureStepStartTime, worklist_item_two.ScheduledProcedureStepSequence[i].ScheduledProcedureStepStartTime)
            self.assertEqual(worklist_item_one.ScheduledProcedureStepSequence[i].ScheduledProcedureStepDescription, worklist_item_two.ScheduledProcedureStepSequence[i].ScheduledProcedureStepDescription)
            self.assertEqual(worklist_item_one.ScheduledProcedureStepSequence[i].CommentsOnTheScheduledProcedureStep, worklist_item_two.ScheduledProcedureStepSequence[i].CommentsOnTheScheduledProcedureStep)

            self._server._worklist_config_provider.reset()
    def test_RequireThat_WorklistRequest_ReturnsWorklistSize_BetweenMinMax(self):
        client = worklist_client.WorklistClient(self._server_config.network_address)

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["delayEnabled"] = False

        query_dataset = Dataset()
        query_dataset.PatientName = '*'
        worklist = client.get_worklist(query_dataset)
        self.assertTrue(len(worklist) >= default_config.default_config["minAmountOfWorklistExams"] and len(worklist) <= default_config.default_config["maxAmountOfWorklistExams"])

        self._server._worklist_config_provider.reset()
    def test_RequireThat_WorklistRequest_ReturnsNonEmptyWorklist_WhenQueryingAllPatients(self):
        client = worklist_client.WorklistClient(self._server_config.network_address)

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["emptyStringsEnabled"] = False
        self._server._worklist_values["noneStringsEnabled"] = False
        self._server._worklist_values["delayEnabled"] = False
        self._server._worklist_values["likelihoodOfLanguage"] = 0

        query_dataset = Dataset()
        query_dataset.PatientName = '*'
        worklist = client.get_worklist(query_dataset)
        self.assertTrue(len(worklist) > 0)

        self._server._worklist_config_provider.reset()
    def test_RequireThat_MulipleWorklistRequests_ReturnsWorklistWithSameLength_ByUseOfSeed(self):
        client = worklist_client.WorklistClient(self._server_config.network_address)

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["delayEnabled"] = False

        query_dataset = Dataset()
        query_dataset.PatientName = '*'

        seed = random.randrange(1000)

        random.seed(seed)
        worklist_one = client.get_worklist(query_dataset)

        random.seed(seed)
        worklist_two = client.get_worklist(query_dataset)

        self.assertEqual(len(worklist_one), len(worklist_two))
    def test_RequireThat_WorklistRequest_ReturnsWorklistWithAllExpectedFieldsPopulated(self):
        client = worklist_client.WorklistClient(self._server_config.network_address)

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["emptyStringsEnabled"] = False
        self._server._worklist_values["noneStringsEnabled"] = False
        self._server._worklist_values["delayEnabled"] = False
        self._server._worklist_values["likelihoodOfLanguage"] = 0

        query_dataset = Dataset()
        query_dataset.PatientName = '*'
        worklist = client.get_worklist(query_dataset)
        worklist_item = worklist[0]

        self.assertTrue(len(worklist_item.StudyInstanceUID) > 0)
        self.assertTrue(len(worklist_item.StudyInstanceUID) > 0)
        self.assertTrue(len(worklist_item.Modality) > 0)
        self.assertTrue(len(worklist_item.SpecificCharacterSet) > 0)
        self.assertTrue(len(worklist_item.AccessionNumber) > 0)
        self.assertTrue(len(worklist_item.PatientBirthDate) > 0)
        self.assertTrue(len(worklist_item.PatientName) > 0)
        self.assertTrue(len(worklist_item.PatientID) > 0)
        self.assertTrue(len(worklist_item.IssuerOfPatientID) > 0)
        self.assertTrue(len(worklist_item.RequestedProcedureID) > 0)
        self.assertTrue(len(worklist_item.RequestedProcedureDescription) > 0)
        self.assertTrue(len(worklist_item.AdmissionID) > 0)
        self.assertTrue(len(str(worklist_item.PatientSize)) > 0)
        self.assertTrue(len(str(worklist_item.PatientWeight)) > 0)

        scheduled_step = worklist_item.ScheduledProcedureStepSequence[0]
        self.assertTrue(len(scheduled_step.ScheduledPerformingPhysicianName) > 0)
        self.assertTrue(len(scheduled_step.ScheduledProcedureStepStartDate) > 0)
        self.assertTrue(len(scheduled_step.ScheduledProcedureStepStartTime) > 0)
        self.assertTrue(len(scheduled_step.ScheduledProcedureStepDescription) > 0)
        self.assertTrue(len(scheduled_step.CommentsOnTheScheduledProcedureStep) > 0)

        otherPatientIdsSq = worklist_item.OtherPatientIDsSequence
        for otherPatientId in otherPatientIdsSq:
            self.assertTrue(len(otherPatientId.PatientID) > 0)
            self.assertTrue(len(otherPatientId.IssuerOfPatientID) > 0)
            self.assertEqual(otherPatientId.TypeOfPatientID, 'TEXT')

        self._server._worklist_config_provider.reset()
    def test_RequireThat_Seedfile_IsSameWhen_ReproduceTrue(self):
        client = worklist_client.WorklistClient(self._server_config.network_address)

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["delayEnabled"] = False

        query_dataset = Dataset()
        query_dataset.PatientName = '*'

        worklist = client.get_worklist(query_dataset)
        with open("seed.txt", "r") as f:
            seed1 = f.read()

        self._server._reproduce = True

        worklist_two = client.get_worklist(query_dataset)
        with open("seed.txt", "r") as f:
            seed2 = f.read()

        self.assertTrue(seed1 == seed2)

        self._server._worklist_config_provider.reset()
    def test_RequireThat_Foreign_Characters_inString_WhenSet(self):
        ifTrue = False
        foreignChars = "ДРЛИПЦЗГБЖ也池馳弛水马弓土人女ДРЛИПЦЗГБЖΑαΒβΓγΔδΕεΖζΗηΘθΙιψΩω日一大二目五後.女かたまやたばㄱㄴㄷㄹㅇㅈㅑㅓㅕㅗㅛㅔㅖㅚㅿㆆㆍ"
        
        client = worklist_client.WorklistClient(self._server_config.network_address)

        self._server._worklist_config_provider.reset()
        self._server._worklist_values["likelihoodOfLanguage"] = 100
        self._server._worklist_values["emptyStringsEnabled"] = False
        self._server._worklist_values["noneStringsEnabled"] = False
        self._server._worklist_values["delayEnabled"] = False

        query_dataset = Dataset()
        query_dataset.PatientName = '*'

        worklist = client.get_worklist(query_dataset)

        for worklist_item in worklist:
            if any(x in foreignChars for x in worklist_item.ScheduledProcedureStepSequence[0].CommentsOnTheScheduledProcedureStep):
                ifTrue = True
                break

        self.assertEqual(True, ifTrue)