def setUp(self):
     super(TestLimitDetections, self).setUp()
     login(self.portal, TEST_USER_NAME)
     servs = self.portal.bika_setup.bika_analysisservices
     # analysis-service-3: Calcium (Ca)
     # analysis-service-6: Cooper (Cu)
     # analysis-service-7: Iron (Fe)
     self.services = [
         servs['analysisservice-3'], servs['analysisservice-6'],
         servs['analysisservice-7']
     ]
     self.lds = [{
         'min': '0',
         'max': '1000',
         'manual': False
     }, {
         'min': '10',
         'max': '20',
         'manual': True
     }, {
         'min': '0',
         'max': '20',
         'manual': True
     }]
     idx = 0
     for s in self.services:
         s.setDetectionLimitSelector(self.lds[idx]['manual'])
         s.setAllowManualDetectionLimit(self.lds[idx]['manual'])
         s.setLowerDetectionLimit(self.lds[idx]['min'])
         s.setUpperDetectionLimit(self.lds[idx]['max'])
         idx += 1
Exemple #2
0
 def setUp(self):
     super(TestManualUncertainty, self).setUp()
     login(self.portal, TEST_USER_NAME)
     servs = self.portal.bika_setup.bika_analysisservices
     # analysis-service-3: Calcium (Ca)
     # analysis-service-6: Cooper (Cu)
     # analysis-service-7: Iron (Fe)
     self.services = [
         servs['analysisservice-3'], servs['analysisservice-6'],
         servs['analysisservice-7']
     ]
     for s in self.services:
         s.setAllowManualUncertainty(True)
     uncs = [{
         'intercept_min': 0,
         'intercept_max': 5,
         'errorvalue': 0.0015
     }, {
         'intercept_min': 5,
         'intercept_max': 10,
         'errorvalue': 0.02
     }, {
         'intercept_min': 10,
         'intercept_max': 20,
         'errorvalue': 0.4
     }]
     self.services[1].setUncertainties(uncs)
     self.services[2].setUncertainties(uncs)
     self.services[2].setPrecisionFromUncertainty(True)
Exemple #3
0
    def setUp(self):
        super(TestHiddenAnalyses, self).setUp()
        login(self.portal, TEST_USER_NAME)
        servs = self.portal.bika_setup.bika_analysisservices

        # analysis-service-3: Calcium (Ca)
        # analysis-service-6: Cooper (Cu)
        # analysis-service-7: Iron (Fe)
        self.services = [servs['analysisservice-3'],
                         servs['analysisservice-6'],
                         servs['analysisservice-7']]

        # Calcium - Hidden not set
        # Copper  - Hidden set to False
        self.services[1].setHidden(False)
        # Iron    - Hidden set to True
        self.services[2].setHidden(True)

        profs = self.portal.bika_setup.bika_analysisprofiles
        # analysisprofile-1: Trace Metals
        self.analysisprofile = profs['analysisprofile-1']

        artemp = self.portal.bika_setup.bika_artemplates
        # artemplate-2: Bruma Metals
        self.artemplate = artemp['artemplate-2']
Exemple #4
0
    def setUp(self):
        super(TestHiddenAnalyses, self).setUp()
        login(self.portal, TEST_USER_NAME)
        servs = self.portal.bika_setup.bika_analysisservices

        # analysis-service-3: Calcium (Ca)
        # analysis-service-6: Cooper (Cu)
        # analysis-service-7: Iron (Fe)
        self.services = [
            servs['analysisservice-3'], servs['analysisservice-6'],
            servs['analysisservice-7']
        ]

        # Calcium - Hidden not set
        # Copper  - Hidden set to False
        self.services[1].setHidden(False)
        # Iron    - Hidden set to True
        self.services[2].setHidden(True)

        profs = self.portal.bika_setup.bika_analysisprofiles
        # analysisprofile-1: Trace Metals
        self.analysisprofile = profs['analysisprofile-1']

        artemp = self.portal.bika_setup.bika_artemplates
        # artemplate-2: Bruma Metals
        self.artemplate = artemp['artemplate-2']
Exemple #5
0
    def test_FormulaValidator(self):
        login(self.portal, TEST_USER_NAME)

        v = validationService.validatorFor('formulavalidator')
        calcs = self.portal.bika_setup.bika_calculations
        calc1 = calcs['calculation-1']

        interim_fields = [
            {'keyword': 'TV',
             'title': 'Titration Volume',
             'unit': '',
             'default': ''},
            {'keyword': 'TF', 'title': 'Titration Factor', 'unit': '', 'default': ''}]
        self.portal.REQUEST.form['InterimFields'] = interim_fields

        formula = "[TV] * [TF] * [Wrong]"
        self.failUnlessEqual(
            v(formula, instance=calc1, field=calc1.schema.get(
                'Formula'), REQUEST=self.portal.REQUEST),
            "Validation failed: Keyword 'Wrong' is invalid")

        formula = "[TV] * [TF]"
        self.assertEqual(
            True,
            v(formula,
              instance=calc1,
              field=calc1.schema.get('Formula'),
              REQUEST=self.portal.REQUEST))
Exemple #6
0
    def setUpPloneSite(self, portal):
        login(portal.aq_parent, SITE_OWNER_NAME)

        wf = getToolByName(portal, 'portal_workflow')
        wf.setDefaultChain('plone_workflow')
        setupPortalContent(portal)

        # make sure we have folder_listing as a template
        portal.getTypeInfo().manage_changeProperties(
            view_methods=['folder_listing'],
            default_view='folder_listing')

        applyProfile(portal, 'bika.lims:default')

        # Add some test users
        for role in ('LabManager',
                     'LabClerk',
                     'Analyst',
                     'Verifier',
                     'Sampler',
                     'Preserver',
                     'Publisher',
                     'Member',
                     'Reviewer',
                     'RegulatoryInspector'):
            for user_nr in range(2):
                if user_nr == 0:
                    username = "******" % (role.lower())
                else:
                    username = "******" % (role.lower(), user_nr)
                try:
                    member = portal.portal_registration.addMember(
                        username,
                        username,
                        properties={
                            'username': username,
                            'email': username + "@example.com",
                            'fullname': username}
                    )
                    # Add user to all specified groups
                    group_id = role + "s"
                    group = portal.portal_groups.getGroupById(group_id)
                    if group:
                        group.addMember(username)
                    # Add user to all specified roles
                    member._addRole(role)
                    # If user is in LabManagers, add Owner local role on clients folder
                    if role == 'LabManager':
                        portal.clients.manage_setLocalRoles(username, ['Owner', ])
                except ValueError:
                    pass  # user exists

        # Force the test browser to show the site always in 'en'
        ltool = portal.portal_languages
        ltool.manage_setLanguageSettings('en', ['en'], setUseCombinedLanguageCodes=False, startNeutral=True)

        logout()
Exemple #7
0
    def setUpPloneSite(self, portal):
        login(portal.aq_parent, SITE_OWNER_NAME)

        wf = getToolByName(portal, 'portal_workflow')
        wf.setDefaultChain('plone_workflow')
        setupPortalContent(portal)

        # make sure we have folder_listing as a template
        portal.getTypeInfo().manage_changeProperties(
            view_methods=['folder_listing'], default_view='folder_listing')

        applyProfile(portal, 'bika.lims:default')

        # Add some test users
        for role in ('LabManager', 'LabClerk', 'Analyst', 'Verifier',
                     'Sampler', 'Preserver', 'Publisher', 'Member', 'Reviewer',
                     'RegulatoryInspector'):
            for user_nr in range(2):
                if user_nr == 0:
                    username = "******" % (role.lower())
                else:
                    username = "******" % (role.lower(), user_nr)
                try:
                    member = portal.portal_registration.addMember(
                        username,
                        username,
                        properties={
                            'username': username,
                            'email': username + "@example.com",
                            'fullname': username
                        })
                    # Add user to all specified groups
                    group_id = role + "s"
                    group = portal.portal_groups.getGroupById(group_id)
                    if group:
                        group.addMember(username)
                    # Add user to all specified roles
                    member._addRole(role)
                    # If user is in LabManagers, add Owner local role on clients folder
                    if role == 'LabManager':
                        portal.clients.manage_setLocalRoles(
                            username, [
                                'Owner',
                            ])
                except ValueError:
                    pass  # user exists

        # Force the test browser to show the site always in 'en'
        ltool = portal.portal_languages
        ltool.manage_setLanguageSettings('en', ['en'],
                                         setUseCombinedLanguageCodes=False,
                                         startNeutral=True)

        logout()
Exemple #8
0
    def test_UncertaintyValidator(self):
        login(self.portal, TEST_USER_NAME)
        services = self.portal.bika_setup.bika_analysisservices
        serv1 = services['analysisservice-1']
        v = validationService.validatorFor('uncertainties_validator')
        field = serv1.schema['Uncertainties']
        key = serv1.id + field.getName()

        uncertainties = [{'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': '200%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error percentage must be between 0 and 100")

        uncertainties = [{'intercept_min': 'a', 'intercept_max': '200', 'errorvalue': '10%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Min values must be numeric")

        uncertainties = [{'intercept_min': '100.01', 'intercept_max': 'a', 'errorvalue': '10%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Max values must be numeric")

        uncertainties = [{'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': 'a%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error values must be numeric")

        uncertainties = [{'intercept_min': '200', 'intercept_max': '100', 'errorvalue': '10%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Max values must be greater than Min values")

        uncertainties = [{'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error percentage must be between 0 and 100")

        uncertainties = [{'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error value must be 0 or greater")
Exemple #9
0
    def setUpPloneSite(self, portal):
        super(BikaTestLayer, self).setUpPloneSite(portal)

        login(portal.aq_parent, SITE_OWNER_NAME)  # again

        # load test data
        self.request = makerequest(portal.aq_parent).REQUEST
        self.request.form['setupexisting'] = 1
        self.request.form['existing'] = "bika.lims:test"
        lsd = LoadSetupData(portal, self.request)
        lsd()

        logout()
Exemple #10
0
    def setUpPloneSite(self, portal):
        super(BikaTestLayer, self).setUpPloneSite(portal)

        login(portal.aq_parent, SITE_OWNER_NAME)  # again

        # load test data
        self.request = makerequest(portal.aq_parent).REQUEST
        self.request.form['setupexisting'] = 1
        self.request.form['existing'] = "bika.lims:test"
        lsd = LoadSetupData(portal, self.request)
        lsd()

        logout()
Exemple #11
0
    def test_UniqueFieldValidator(self):
        login(self.portal, TEST_USER_NAME)

        clients = self.portal.clients
        client1 = clients['client-2']  # not Happy Hills
        self.assertEqual(
            client1.schema.get('Name').validate('Happy Hills', client1),
            u"Validation failed: 'Happy Hills' is not unique")
        self.assertEqual(
            None,
            client1.schema.get(
                'title').validate(
                    'Another Client',
                    client1))
 def setUp(self):
     super(TestManualUncertainty, self).setUp()
     login(self.portal, TEST_USER_NAME)
     servs = self.portal.bika_setup.bika_analysisservices
     # analysis-service-3: Calcium (Ca)
     # analysis-service-6: Cooper (Cu)
     # analysis-service-7: Iron (Fe)
     self.services = [servs['analysisservice-3'],
                      servs['analysisservice-6'],
                      servs['analysisservice-7']]
     for s in self.services:
         s.setAllowManualUncertainty(True)
     uncs = [{'intercept_min': 0, 'intercept_max': 5, 'errorvalue': 0.0015},
             {'intercept_min': 5, 'intercept_max':10, 'errorvalue': 0.02},
             {'intercept_min':10, 'intercept_max':20, 'errorvalue': 0.4}]
     self.services[1].setUncertainties(uncs);
     self.services[2].setUncertainties(uncs);
     self.services[2].setPrecisionFromUncertainty(True)
Exemple #13
0
 def setUp(self):
     super(TestLimitDetections, self).setUp()
     login(self.portal, TEST_USER_NAME)
     servs = self.portal.bika_setup.bika_analysisservices
     # analysis-service-3: Calcium (Ca)
     # analysis-service-6: Cooper (Cu)
     # analysis-service-7: Iron (Fe)
     self.services = [servs['analysisservice-3'],
                      servs['analysisservice-6'],
                      servs['analysisservice-7']]
     self.lds = [{'min': '0',  'max': '1000', 'manual': False},
                 {'min': '10', 'max': '20',   'manual': True},
                 {'min': '0',  'max': '20',   'manual': True}]
     idx = 0
     for s in self.services:
         s.setDetectionLimitSelector(self.lds[idx]['manual'])
         s.setAllowManualDetectionLimit(self.lds[idx]['manual'])
         s.setLowerDetectionLimit(self.lds[idx]['min'])
         s.setUpperDetectionLimit(self.lds[idx]['max'])
         idx+=1
Exemple #14
0
    def test_ServiceKeywordValidator(self):
        login(self.portal, TEST_USER_NAME)

        services = self.portal.bika_setup.bika_analysisservices
        service1 = services['analysisservice-1']

        self.assertEqual(
            service1.schema.get('Keyword').validate('', service1),
            u'Analysis Keyword is required, please correct.')
        self.assertEqual(
            service1.schema.get('Keyword').validate('&', service1),
            u'Validation failed: keyword contains invalid characters')
        self.assertEqual(
            service1.schema.get('Keyword').validate('Ca', service1),
            u"Validation failed: 'Ca': This keyword is already in use by service 'Calcium'")
        self.assertEqual(
            service1.schema.get('Keyword').validate('TV', service1),
            u"Validation failed: 'TV': This keyword is already in use by calculation 'Titration'")
        self.assertEqual(
            None,
            service1.schema.get(
                'Keyword').validate(
                    'VALID_KW',
                    service1))
Exemple #15
0
 def setUp(self):
     super(TestInstrumentAlerts, self).setUp()
     login(self.portal, TEST_USER_NAME)
Exemple #16
0
    def test_CoordinateValidator(self):
        login(self.portal, TEST_USER_NAME)

        sp = self.portal.bika_setup.bika_samplepoints['samplepoint-1']

        latitude = {
            'degrees': '!',
            'minutes': '2',
            'seconds': '3',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: degrees must be numeric" in val)

        latitude = {
            'degrees': '0',
            'minutes': '!',
            'seconds': '3',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: minutes must be numeric" in val)

        latitude = {
            'degrees': '0',
            'minutes': '0',
            'seconds': '!',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: seconds must be numeric" in val)

        latitude = {
            'degrees': '0',
            'minutes': '60',
            'seconds': '0',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: minutes must be 0 - 59" in val)

        latitude = {
            'degrees': '0',
            'minutes': '0',
            'seconds': '60',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: seconds must be 0 - 59" in val)

        # latitude specific

        latitude = {
            'degrees': '91',
            'minutes': '0',
            'seconds': '0',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: degrees must be 0 - 90" in val)

        latitude = {
            'degrees': '90',
            'minutes': '1',
            'seconds': '0',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: degrees is 90; minutes must be zero" in val)

        latitude = {
            'degrees': '90',
            'minutes': '0',
            'seconds': '1',
            'bearing': 'N'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: degrees is 90; seconds must be zero" in val)

        latitude = {
            'degrees': '90',
            'minutes': '0',
            'seconds': '0',
            'bearing': 'E'}
        self.portal.REQUEST.form['Latitude'] = latitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Latitude').validate(latitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: Bearing must be N/S" in val)

        # longitude specific

        longitude = {
            'degrees': '181',
            'minutes': '0',
            'seconds': '0',
            'bearing': 'E'}
        self.portal.REQUEST.form['Longitude'] = longitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Longitude').validate(longitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: degrees must be 0 - 180" in val)

        longitude = {
            'degrees': '180',
            'minutes': '1',
            'seconds': '0',
            'bearing': 'E'}
        self.portal.REQUEST.form['Longitude'] = longitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Longitude').validate(longitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: degrees is 180; minutes must be zero" in val)

        longitude = {
            'degrees': '180',
            'minutes': '0',
            'seconds': '1',
            'bearing': 'E'}
        self.portal.REQUEST.form['Longitude'] = longitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Longitude').validate(longitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: degrees is 180; seconds must be zero" in val)

        longitude = {
            'degrees': '0',
            'minutes': '0',
            'seconds': '0',
            'bearing': 'N'}
        self.portal.REQUEST.form['Longitude'] = longitude
        self.portal.REQUEST['validated'] = None
        val = sp.schema.get('Longitude').validate(longitude, sp)
        self.assertEqual(
            True,
            u"Validation failed: Bearing must be E/W" in val)

        longitude = {
            'degrees': '1',
            'minutes': '1',
            'seconds': '1',
            'bearing': 'E'}
        self.portal.REQUEST.form['Longitude'] = longitude
        self.portal.REQUEST['validated'] = None
        self.assertEqual(
            None,
            sp.schema.get(
                'Longitude').validate(
                    longitude,
                    sp))
Exemple #17
0
    def setUp(self):
        super(TestCalculations, self).setUp()
        login(self.portal, TEST_USER_NAME)

        # Calculation: Total Hardness
        # Initial formula: [Ca] + [Mg]
        calcs = self.portal.bika_setup.bika_calculations
        self.calculation = [
            calcs[k] for k in calcs if calcs[k].title == 'Total Hardness'
        ][0]

        # Service with calculation: Tot. Hardness (THCaCO3)
        servs = self.portal.bika_setup.bika_analysisservices
        self.calcservice = [
            servs[k] for k in servs
            if servs[k].title == 'Tot. Hardness (THCaCO3)'
        ][0]
        self.calcservice.setUseDefaultCalculation(False)
        self.calcservice.setDeferredCalculation(self.calculation)

        # Analysis Services: Ca and Mg
        self.services = [
            servs[k] for k in servs if servs[k].getKeyword() in ('Ca', 'Mg')
        ]

        # Allow Manual DLs
        for s in self.services:
            s.setLowerDetectionLimit('10')
            s.setUpperDetectionLimit('20')
            s.setDetectionLimitSelector(True)
            s.setAllowManualDetectionLimit(True)

        # Formulas to test
        # Ca and Mg detection Limits: LDL: 10, UDL: 20
        self.formulas = [
            {
                'formula': '[Ca]+[Mg]',
                'analyses': {
                    'Ca': '10',
                    'Mg': '15'
                },
                'interims': {},
                'exresult': '25'
            },
            {
                'formula': '[Ca]+[Mg]',
                'analyses': {
                    'Ca': '-20',
                    'Mg': '5'
                },
                'interims': {},
                'exresult': '-15'
            },
            {
                'formula': '[Ca]+[Mg]+[IN1]',
                'analyses': {
                    'Ca': '10',
                    'Mg': '15'
                },
                'interims': {
                    'IN1': '2'
                },
                'exresult': '27'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '5',
                    'Mg': '1'
                },
                'interims': {
                    'IN1': '5'
                },
                'exresult': '15'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '10',
                    'Mg': '1'
                },
                'interims': {
                    'IN1': '5'
                },
                'exresult': '16'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '10',
                    'Mg': '2'
                },
                'interims': {
                    'IN1': '5'
                },
                'exresult': '17'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '15',
                    'Mg': '2'
                },
                'interims': {
                    'IN1': '5'
                },
                'exresult': '22'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '15',
                    'Mg': '3'
                },
                'interims': {
                    'IN1': '5'
                },
                'exresult': '23'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '20',
                    'Mg': '3'
                },
                'interims': {
                    'IN1': '5'
                },
                'exresult': '28'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '20',
                    'Mg': '3'
                },
                'interims': {
                    'IN1': '10'
                },
                'exresult': '33'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '30',
                    'Mg': '3'
                },
                'interims': {
                    'IN1': '10'
                },
                'exresult': '50'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '>30',
                    'Mg': '5'
                },
                'interims': {
                    'IN1': '10'
                },
                'exresult': '60'
            },
            {
                'formula':
                '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
                'analyses': {
                    'Ca': '<5',
                    'Mg': '5'
                },
                'interims': {
                    'IN1': '10'
                },
                'exresult': '10'
            },
        ]
Exemple #18
0
 def setUp(self):
     super(TestInstrumentAlerts, self).setUp()
     login(self.portal, TEST_USER_NAME)
Exemple #19
0
    def test_InterimFieldsValidator(self):
        login(self.portal, TEST_USER_NAME)

        calcs = self.portal.bika_setup.bika_calculations
        # Titration
        calc1 = calcs['calculation-1']

        key = calc1.id + 'InterimFields'

        interim_fields = []
        self.portal.REQUEST.form['InterimFields'] = interim_fields
        self.portal.REQUEST['validated'] = None
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        self.assertEqual(
            None,
            calc1.schema.get(
                'InterimFields').validate(
                    interim_fields,
                    calc1,
                    REQUEST=self.portal.REQUEST))

        interim_fields = [{'keyword': '&',
                           'title': 'Titration Volume',
                           'unit': '',
                           'default': ''},
                          ]
        self.portal.REQUEST.form['InterimFields'] = interim_fields
        self.portal.REQUEST['validated'] = None
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        self.assertEqual(
            calc1.schema.get(
                'InterimFields').validate(
                    interim_fields,
                    calc1,
                    REQUEST=self.portal.REQUEST),
            u"Validation failed: keyword contains invalid characters")

        interim_fields = [
            {'keyword': 'XXX',
             'title': 'Gross Mass',
             'unit': '',
             'default': ''},
            {'keyword': 'TV', 'title': 'Titration Volume', 'unit': '', 'default': ''}]
        self.portal.REQUEST.form['InterimFields'] = interim_fields
        self.portal.REQUEST['validated'] = None
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        self.assertEqual(
            calc1.schema.get(
                'InterimFields').validate(
                    interim_fields,
                    calc1,
                    REQUEST=self.portal.REQUEST),
            u"Validation failed: column title 'Gross Mass' must have keyword 'GM'")

        interim_fields = [
            {'keyword': 'GM', 'title': 'XXX', 'unit': '', 'default': ''},
            {'keyword': 'TV', 'title': 'Titration Volume', 'unit': '', 'default': ''}]
        self.portal.REQUEST.form['InterimFields'] = interim_fields
        self.portal.REQUEST['validated'] = None
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        self.assertEqual(
            calc1.schema.get(
                'InterimFields').validate(
                    interim_fields,
                    calc1,
                    REQUEST=self.portal.REQUEST),
            u"Validation failed: keyword 'GM' must have column title 'Gross Mass'")

        interim_fields = [
            {'keyword': 'TV',
             'title': 'Titration Volume',
             'unit': '',
             'default': ''},
            {'keyword': 'TV', 'title': 'Titration Volume 1', 'unit': '', 'default': ''}]
        self.portal.REQUEST.form['InterimFields'] = interim_fields
        self.portal.REQUEST['validated'] = None
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        self.assertEqual(
            calc1.schema.get(
                'InterimFields').validate(
                    interim_fields,
                    calc1,
                    REQUEST=self.portal.REQUEST),
            u"Validation failed: 'TV': duplicate keyword")

        interim_fields = [
            {'keyword': 'TV',
             'title': 'Titration Volume',
             'unit': '',
             'default': ''},
            {'keyword': 'TF', 'title': 'Titration Volume', 'unit': '', 'default': ''}]
        self.portal.REQUEST.form['InterimFields'] = interim_fields
        self.portal.REQUEST['validated'] = None
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        self.assertEqual(
            calc1.schema.get(
                'InterimFields').validate(
                    interim_fields,
                    calc1,
                    REQUEST=self.portal.REQUEST),
            u"Validation failed: 'Titration Volume': duplicate title")

        interim_fields = [
            {'keyword': 'TV',
             'title': 'Titration Volume',
             'unit': '',
             'default': ''},
            {'keyword': 'TF', 'title': 'Titration Factor', 'unit': '', 'default': ''}]
        self.portal.REQUEST.form['InterimFields'] = interim_fields
        self.portal.REQUEST['validated'] = None
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        self.assertEqual(
            None,
            calc1.schema.get(
                'InterimFields').validate(
                    interim_fields,
                    calc1,
                    REQUEST=self.portal.REQUEST))
Exemple #20
0
 def setUp(self):
     super(TestShowPartitions, self).setUp()
     login(self.portal, TEST_USER_NAME)
Exemple #21
0
    def setUp(self):
        super(TestCalculations, self).setUp()
        login(self.portal, TEST_USER_NAME)

        # Calculation: Total Hardness
        # Initial formula: [Ca] + [Mg]
        calcs = self.portal.bika_setup.bika_calculations
        self.calculation = [calcs[k] for k in calcs if calcs[k].title=='Total Hardness'][0]

        # Service with calculation: Tot. Hardness (THCaCO3)
        servs = self.portal.bika_setup.bika_analysisservices
        self.calcservice = [servs[k] for k in servs if servs[k].title=='Tot. Hardness (THCaCO3)'][0]
        self.calcservice.setUseDefaultCalculation(False)
        self.calcservice.setDeferredCalculation(self.calculation)

        # Analysis Services: Ca and Mg
        self.services = [servs[k] for k in servs if servs[k].getKeyword() in ('Ca', 'Mg')]

        # Allow Manual DLs
        for s in self.services:
            s.setLowerDetectionLimit('10')
            s.setUpperDetectionLimit('20')
            s.setDetectionLimitSelector(True)
            s.setAllowManualDetectionLimit(True)

        # Formulas to test
        # Ca and Mg detection Limits: LDL: 10, UDL: 20
        self.formulas = [

            {'formula' : '[Ca]+[Mg]',
             'analyses': {'Ca':'10', 'Mg': '15'},
             'interims': {},
             'exresult': '25'
            },

            {'formula' : '[Ca]+[Mg]',
             'analyses': {'Ca':'-20', 'Mg': '5'},
             'interims': {},
             'exresult': '-15'
            },

            {'formula' : '[Ca]+[Mg]+[IN1]',
             'analyses': {'Ca': '10', 'Mg': '15'},
             'interims': {'IN1':'2'},
             'exresult': '27'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '5', 'Mg': '1'},
             'interims': {'IN1':'5'},
             'exresult': '15'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '10', 'Mg': '1'},
             'interims': {'IN1':'5'},
             'exresult': '16'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '10', 'Mg': '2'},
             'interims': {'IN1':'5'},
             'exresult': '17'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '15', 'Mg': '2'},
             'interims': {'IN1':'5'},
             'exresult': '22'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '15', 'Mg': '3'},
             'interims': {'IN1':'5'},
             'exresult': '23'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '20', 'Mg': '3'},
             'interims': {'IN1':'5'},
             'exresult': '28'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '20', 'Mg': '3'},
             'interims': {'IN1':'10'},
             'exresult': '33'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '30', 'Mg': '3'},
             'interims': {'IN1':'10'},
             'exresult': '50'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '>30', 'Mg': '5'},
             'interims': {'IN1':'10'},
             'exresult': '60'
            },

            {'formula' : '([Ca]+[Ca.LDL]) if [Ca.BELOWLDL] else (([Ca.UDL] + [Ca]) if [Ca.ABOVEUDL] else [Ca.RESULT] + [Mg] + [IN1])',
             'analyses': {'Ca': '<5', 'Mg': '5'},
             'interims': {'IN1':'10'},
             'exresult': '10'
            },
        ]