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
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)
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']
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']
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))
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()
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()
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")
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()
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)
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
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))
def setUp(self): super(TestInstrumentAlerts, self).setUp() login(self.portal, TEST_USER_NAME)
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))
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' }, ]
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))
def setUp(self): super(TestShowPartitions, self).setUp() login(self.portal, TEST_USER_NAME)
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' }, ]