def test_build(self):
        tested = MdsolDerivationDef(
            "AGE",
            variable_oid="VAROID",
            field_oid="FIELDOID",
            form_oid="MyForm",
            folder_oid="MyFolder",
            record_position=0,
            form_repeat_number=2,
            folder_repeat_number=3,
            logical_record_position="MaxBySubject",
            all_variables_in_fields=True,
            all_variables_in_folders=True,
        )
        doc = obj_to_doc(tested)
        tested << MdsolDerivationStep(function=StepType.Age)

        doc = obj_to_doc(tested)
        self.assertEqual("mdsol:DerivationDef", doc.tag)
        self.assertEqual("TRUE", doc.attrib["Active"])
        self.assertEqual("AGE", doc.attrib["OID"])
        self.assertEqual("FALSE", doc.attrib["NeedsRetesting"])
        self.assertEqual("FALSE", doc.attrib["BypassDuringMigration"])
        self.assertEqual("TRUE", doc.attrib["AllVariablesInFolders"])
        self.assertEqual("TRUE", doc.attrib["AllVariablesInFields"])
        self.assertEqual("VAROID", doc.attrib["VariableOID"])
        self.assertEqual("FIELDOID", doc.attrib["FieldOID"])
        self.assertEqual("MyForm", doc.attrib["FormOID"])
        self.assertEqual("MyFolder", doc.attrib["FolderOID"])
        self.assertEqual("0", doc.attrib["RecordPosition"])
        self.assertEqual("2", doc.attrib["FormRepeatNumber"])
        self.assertEqual("3", doc.attrib["FolderRepeatNumber"])
        self.assertEqual("MaxBySubject", doc.attrib["LogicalRecordPosition"])

        self.assertEqual("mdsol:DerivationStep", doc.getchildren()[0].tag)
 def test_builder(self):
     """XML produced"""
     tested = Decode()
     tested << TranslatedText("Yes")
     doc = obj_to_doc(tested)
     self.assertEqual("Decode", doc.tag)
     self.assertEqual("TranslatedText", doc.getchildren()[0].tag)
 def test_build(self):
     tested = MdsolCheckAction(
         field_oid="Field",
         variable_oid="TheVAR",
         form_oid="The Form",
         form_repeat_number=1,
         folder_oid="The Folder",
         folder_repeat_number=2,
         record_position=3,
         check_action_type=ActionType.SetDataPoint,
         check_string="CString",  # Knowing which of these to use for each action type is
         check_script="CScript",  # the trick. Best to look in an Architect Loader Spreadsheet
         check_options="COptions",
     )  # to get an idea
     doc = obj_to_doc(tested)
     self.assertEqual("mdsol:CheckAction", doc.tag)
     self.assertEqual("The Folder", doc.attrib["FolderOID"])
     self.assertEqual("The Form", doc.attrib["FormOID"])
     self.assertEqual("Field", doc.attrib["FieldOID"])
     self.assertEqual("TheVAR", doc.attrib["VariableOID"])
     self.assertEqual("1", doc.attrib["FormRepeatNumber"])
     self.assertEqual("2", doc.attrib["FolderRepeatNumber"])
     self.assertEqual("3", doc.attrib["RecordPosition"])
     self.assertEqual("CString", doc.attrib["String"])
     self.assertEqual("CScript", doc.attrib["Script"])
     self.assertEqual("COptions", doc.attrib["Options"])
     self.assertEqual(ActionType.SetDataPoint.value, doc.attrib["Type"])
 def test_builder(self):
     """XML produced"""
     tested = TranslatedText("A test", lang="en")
     doc = obj_to_doc(tested)
     self.assertEqual(doc.tag, "TranslatedText")
     self.assertEqual("en", doc.attrib["xml:lang"])
     self.assertEqual("A test", doc.text)
 def test_build_datastep(self):
     tested = MdsolDerivationStep(
         variable_oid="VAROID",
         field_oid="FIELDOID",
         form_oid="VFORM",
         folder_oid="MyFolder",
         record_position=0,
         form_repeat_number=2,
         folder_repeat_number=3,
         logical_record_position="MaxBySubject",
     )
     doc = obj_to_doc(tested)
     self.assertEqual("mdsol:DerivationStep", doc.tag)
     self.assertEqual("VAROID", doc.attrib["VariableOID"])
     self.assertEqual("FIELDOID", doc.attrib["FieldOID"])
     self.assertEqual("VFORM", doc.attrib["FormOID"])
     self.assertEqual("MyFolder", doc.attrib["FolderOID"])
     self.assertEqual("0", doc.attrib["RecordPosition"])
     self.assertEqual("2", doc.attrib["FormRepeatNumber"])
     self.assertEqual("3", doc.attrib["FolderRepeatNumber"])
     self.assertEqual("MaxBySubject", doc.attrib["LogicalRecordPosition"])
     # No data format param
     self.assertEqual("", doc.attrib.get("DataFormat", ""))
     # No function param
     self.assertEqual("", doc.attrib.get("Function", ""))
    def test_build(self):
        tested = MdsolLabelRef("OID1", 1)

        doc = obj_to_doc(tested)
        self.assertEqual(doc.tag, "mdsol:LabelRef")
        self.assertEqual("OID1", doc.attrib["LabelOID"])
        self.assertEqual("1", doc.attrib["OrderNumber"])
 def test_build_function(self):
     tested = MdsolDerivationStep(function=StepType.Add)
     doc = obj_to_doc(tested)
     self.assertEqual("mdsol:DerivationStep", doc.tag)
     self.assertEqual(StepType.Add.value, doc.attrib["Function"])
     # No data format param
     self.assertEqual("", doc.attrib.get("DataFormat", ""))
 def test_builder(self):
     tested = ItemGroupRef("ItemGroup1", 1, mandatory=True)
     doc = obj_to_doc(tested)
     self.assertEqual(doc.tag, "ItemGroupRef")
     self.assertEqual("ItemGroup1", doc.attrib["ItemGroupOID"])
     self.assertEqual("1", doc.attrib["OrderNumber"])
     self.assertEqual("Yes", doc.attrib["Mandatory"])
 def test_builder_no_lang(self):
     """XML produced when no lang is provided"""
     tested = TranslatedText("A test")
     doc = obj_to_doc(tested)
     self.assertEqual(doc.tag, "TranslatedText")
     self.assertEqual("", doc.get("xml:lang", ""))
     self.assertEqual("A test", doc.text)
    def test_builder(self):
        tested = StudyEventDef(
            "OID",
            "Name",
            False,
            StudyEventDef.SCHEDULED,
            category="Test Cat",
            access_days=1,
            start_win_days=2,
            target_days=3,
            end_win_days=4,
            overdue_days=5,
            close_days=6,
        )
        tested << FormRef("FORMOID", 1, False)

        doc = obj_to_doc(tested)
        self.assertEqual(doc.tag, "StudyEventDef")
        self.assertEqual("OID", doc.attrib["OID"])
        self.assertEqual("Name", doc.attrib["Name"])
        self.assertEqual("Scheduled", doc.attrib["Type"])
        self.assertEqual("Test Cat", doc.attrib["Category"])
        self.assertEqual("1", doc.attrib["mdsol:AccessDays"])
        self.assertEqual("2", doc.attrib["mdsol:StartWinDays"])
        self.assertEqual("3", doc.attrib["mdsol:TargetDays"])
        self.assertEqual("4", doc.attrib["mdsol:EndWinDays"])
        self.assertEqual("5", doc.attrib["mdsol:OverDueDays"])
        self.assertEqual("6", doc.attrib["mdsol:CloseDays"])
        self.assertEqual("FormRef", doc.getchildren()[0].tag)
    def test_build(self):
        tested = ItemGroupDef(
            "DM",
            "Demography",
            repeating=True,
            is_reference_data=True,
            sas_dataset_name="DMSAS",
            domain="TESTDOMAIN",
            origin="TESTORIGIN",
            role="TESTROLE",
            purpose="TESTPURPOSE",
            comment="A comment",
        )

        tested << ItemRef("OID1", 1)
        tested << MdsolLabelRef("LABEL1", 2)

        doc = obj_to_doc(tested)
        self.assertEqual(doc.tag, "ItemGroupDef")
        self.assertEqual("DM", doc.attrib["OID"])
        self.assertEqual("Yes", doc.attrib["Repeating"])
        self.assertEqual("Yes", doc.attrib["IsReferenceData"])
        self.assertEqual("Demography", doc.attrib["Name"])
        self.assertEqual("DMSAS", doc.attrib["SASDatasetName"])
        self.assertEqual("TESTDOMAIN", doc.attrib["Domain"])
        self.assertEqual("TESTORIGIN", doc.attrib["Origin"])
        self.assertEqual("TESTROLE", doc.attrib["Role"])
        self.assertEqual("TESTPURPOSE", doc.attrib["Purpose"])
        self.assertEqual("A comment", doc.attrib["Comment"])
        self.assertEqual("ItemRef", doc.getchildren()[0].tag)
        self.assertEqual("mdsol:LabelRef", doc.getchildren()[1].tag)
 def test_lang_default(self):
     tested = MdsolHeaderText("Content", "en")
     self.assertEqual("en", tested.lang)
     doc = obj_to_doc(tested)
     self.assertEqual("mdsol:HeaderText", doc.tag)
     self.assertEqual("Content", doc.text)
     self.assertEqual("en", doc.attrib["xml:lang"])
 def test_build(self):
     tested = MdsolDerivationStep(data_format="$1", value="1")
     doc = obj_to_doc(tested)
     self.assertEqual("mdsol:DerivationStep", doc.tag)
     self.assertEqual("$1", doc.attrib["DataFormat"])
     self.assertEqual("1", doc.attrib["Value"])
     # No function param
     self.assertEqual("", doc.attrib.get("Function", ""))
 def test_build_custom_function(self):
     tested = MdsolDerivationStep(custom_function="AlwaysTrue*")
     doc = obj_to_doc(tested)
     self.assertEqual("mdsol:DerivationStep", doc.tag)
     self.assertEqual("AlwaysTrue*", doc.attrib["CustomFunction"])
     # No data format param
     self.assertEqual("", doc.attrib.get("DataFormat", ""))
     # No function param
     self.assertEqual("", doc.attrib.get("Function", ""))
 def test_builder(self):
     """XML produced"""
     tested = CodeList("CL_YN", "YesNo", DataType.String, sas_format_name="YESNO_CL")
     tested << CodeListItem("Y")
     doc = obj_to_doc(tested)
     self.assertEqual("CodeList", doc.tag)
     self.assertEqual(DataType.String.value, doc.attrib["DataType"])
     self.assertEqual("YESNO_CL", doc.attrib["SASFormatName"])
     self.assertEqual("CodeListItem", doc.getchildren()[0].tag)
 def test_builder_basic(self):
     """XML produced"""
     tested = CodeListItem("Y")
     tested << Decode()
     doc = obj_to_doc(tested)
     self.assertEqual("CodeListItem", doc.tag)
     self.assertEqual("", doc.get("mdsol:Specify", ""))
     self.assertEqual("", doc.get("mdsol:OrderNumber", ""))
     self.assertEqual("Y", doc.attrib["CodedValue"])
     self.assertEqual("Decode", doc.getchildren()[0].tag)
 def test_builder_order_specify(self):
     """XML produced with optional params set"""
     tested = CodeListItem("Y", order_number=1, specify=True)
     tested << Decode()
     doc = obj_to_doc(tested)
     self.assertEqual("CodeListItem", doc.tag)
     self.assertEqual("Yes", doc.attrib["mdsol:Specify"])
     self.assertEqual("1", doc.attrib["mdsol:OrderNumber"])
     self.assertEqual("Y", doc.attrib["CodedValue"])
     self.assertEqual("Decode", doc.getchildren()[0].tag)
    def test_build(self):
        self.tested << TranslatedText("Please answer all questions")
        self.tested << MdsolViewRestriction("DM")

        doc = obj_to_doc(self.tested)
        self.assertEqual(doc.tag, "mdsol:LabelDef")
        self.assertEqual("L_AGE", doc.attrib["OID"])
        self.assertEqual("Age Label", doc.attrib["Name"])
        self.assertEqual("4", doc.attrib["FieldNumber"])
        self.assertEqual("TranslatedText", doc.getchildren()[0].tag)
        self.assertEqual("mdsol:ViewRestriction", doc.getchildren()[1].tag)
 def test_builder(self):
     """XML produced"""
     tested = Study("oid1", "GlobalLibrary Volume")(
         GlobalVariables("MY_TEST_PROJECT"), BasicDefinitions(), MetaDataVersion("OID", "NAME")
     )
     doc = obj_to_doc(tested)
     self.assertEqual(doc.tag, "Study")
     self.assertEqual(doc.attrib["mdsol:ProjectType"], "GlobalLibrary Volume")
     self.assertEqual(doc.getchildren()[0].tag, "GlobalVariables")
     self.assertEqual(doc.getchildren()[1].tag, "BasicDefinitions")
     self.assertEqual(doc.getchildren()[2].tag, "MetaDataVersion")
    def test_build(self):
        self.tested = RangeCheck(comparator=RangeCheckComparatorType.GreaterThanEqualTo, soft_hard=RangeCheckType.Soft)
        self.tested << CheckValue(0)
        self.tested << MeasurementUnitRef("kg")

        doc = obj_to_doc(self.tested)
        self.assertEqual("RangeCheck", doc.tag)
        self.assertEqual("Soft", doc.attrib["SoftHard"])
        self.assertEqual("GE", doc.attrib["Comparator"])
        self.assertEqual("CheckValue", doc.getchildren()[0].tag)
        self.assertEqual("MeasurementUnitRef", doc.getchildren()[1].tag)
    def test_build(self):
        self.tested << Question()(TranslatedText("How do you feel today?"))
        self.tested << CodeListRef("SCALE_1")
        self.tested << MeasurementUnitRef("Years")
        self.tested << MdsolHelpText("en", "Content of help")
        self.tested << MdsolViewRestriction("DM")
        self.tested << MdsolEntryRestriction("CRA")
        self.tested << MdsolHeaderText("YRS")
        self.tested << MdsolReviewGroup("CRA")
        self.tested << RangeCheck(RangeCheckComparatorType.LessThanEqualTo, RangeCheckType.Soft)

        doc = obj_to_doc(self.tested)
        self.assertEqual(doc.tag, "ItemDef")
        self.assertEqual("I_AGE", doc.attrib["OID"])
        self.assertEqual("Age", doc.attrib["Name"])
        self.assertEqual("Yes", doc.attrib["mdsol:Active"])
        self.assertEqual("integer", doc.attrib["DataType"])
        self.assertEqual("3", doc.attrib["Length"])
        self.assertEqual("Text", doc.attrib["mdsol:ControlType"])
        self.assertEqual("3", doc.attrib["SignificantDigits"])
        self.assertEqual("SAGE", doc.attrib["SASFieldName"])
        self.assertEqual("SVARNAME", doc.attrib["SDSVarName"])
        self.assertEqual("AGE_YRS", doc.attrib["mdsol:SASLabel"])
        self.assertEqual("3.0", doc.attrib["mdsol:SASFormat"])
        self.assertEqual("A comment", doc.attrib["Comment"])
        self.assertEqual("An origin", doc.attrib["Origin"])
        self.assertEqual("No", doc.attrib["mdsol:QueryFutureDate"])
        self.assertEqual("Yes", doc.attrib["mdsol:Visible"])
        self.assertEqual("Yes", doc.attrib["mdsol:TranslationRequired"])
        self.assertEqual("Yes", doc.attrib["mdsol:SourceDocument"])
        self.assertEqual("No", doc.attrib["mdsol:OtherVisits"])
        self.assertEqual("Yes", doc.attrib["mdsol:SourceDocument"])
        self.assertEqual("Yes", doc.attrib["mdsol:QueryNonConformance"])
        self.assertEqual("No", doc.attrib["mdsol:CanSetItemGroupDate"])
        self.assertEqual("No", doc.attrib["mdsol:CanSetFormDate"])
        self.assertEqual("No", doc.attrib["mdsol:CanSetStudyEventDate"])
        self.assertEqual("No", doc.attrib["mdsol:CanSetSubjectDate"])
        self.assertEqual("Yes", doc.attrib["mdsol:VisualVerify"])
        self.assertEqual("Yes", doc.attrib["mdsol:DoesNotBreakSignature"])
        self.assertEqual("SOMETHING_DIFFERENT", doc.attrib["mdsol:VariableOID"])
        self.assertEqual("jpg", doc.attrib["mdsol:AcceptableFileExtensions"])
        self.assertEqual("99", doc.attrib["mdsol:DefaultValue"])
        self.assertEqual("mmm yy dd", doc.attrib["mdsol:DateTimeFormat"])
        self.assertEqual("10", doc.attrib["mdsol:FieldNumber"])

        self.assertEqual("Question", doc.getchildren()[0].tag)
        self.assertEqual("CodeListRef", doc.getchildren()[1].tag)
        self.assertEqual("MeasurementUnitRef", doc.getchildren()[2].tag)
        self.assertEqual("RangeCheck", doc.getchildren()[3].tag)
        self.assertEqual("mdsol:HeaderText", doc.getchildren()[4].tag)
        self.assertEqual("mdsol:ViewRestriction", doc.getchildren()[5].tag)
        self.assertEqual("mdsol:EntryRestriction", doc.getchildren()[6].tag)
        self.assertEqual("mdsol:HelpText", doc.getchildren()[7].tag)
        self.assertEqual("mdsol:ReviewGroup", doc.getchildren()[8].tag)
 def test_builder(self):
     """XML produced"""
     tested = GlobalVariables("project_name", description="A description")
     doc = obj_to_doc(tested)
     self.assertEqual(doc.tag, "GlobalVariables")
     self.assertEqual(doc.getchildren()[0].tag, "StudyName")
     self.assertEqual("project_name", doc.getchildren()[0].text)
     self.assertEqual(doc.getchildren()[1].tag, "StudyDescription")
     self.assertEqual("A description", doc.getchildren()[1].text)
     self.assertEqual(doc.getchildren()[2].tag, "ProtocolName")
     self.assertEqual("project_name", doc.getchildren()[2].text)
    def test_build(self):
        tested = MdsolEditCheckDef("CHECK1")

        tested << MdsolCheckStep(data_format="$1", static_value="1")
        tested << MdsolCheckAction()

        doc = obj_to_doc(tested)
        self.assertEqual("mdsol:EditCheckDef", doc.tag)
        self.assertEqual("TRUE", doc.attrib["Active"])
        self.assertEqual("CHECK1", doc.attrib["OID"])
        self.assertEqual("FALSE", doc.attrib["NeedsRetesting"])
        self.assertEqual("FALSE", doc.attrib["BypassDuringMigration"])
        self.assertEqual("mdsol:CheckStep", doc.getchildren()[0].tag)
        self.assertEqual("mdsol:CheckAction", doc.getchildren()[1].tag)
    def test_build(self):
        tested = ItemRef(
            "OID1", 1, key_sequence=3, imputation_method_oid="IMPUTE1", role="AROLE", role_codelist_oid="ROLEX"
        )

        tested << MdsolAttribute("Namespace", "Name", "Value")
        tested << MdsolAttribute("Namespace2", "Name2", "Value2")

        doc = obj_to_doc(tested)
        self.assertEqual(doc.tag, "ItemRef")
        self.assertEqual("OID1", doc.attrib["ItemOID"])
        self.assertEqual("1", doc.attrib["OrderNumber"])
        self.assertEqual("3", doc.attrib["KeySequence"])
        self.assertEqual("IMPUTE1", doc.attrib["ImputationMethodOID"])
        self.assertEqual("AROLE", doc.attrib["Role"])
        self.assertEqual("ROLEX", doc.attrib["RoleCodeListOID"])
        self.assertEqual("mdsol:Attribute", doc.getchildren()[0].tag)
        self.assertEqual("mdsol:Attribute", doc.getchildren()[1].tag)
    def test_builder(self):
        """XML produced"""
        tested = MetaDataVersion(
            "OID",
            "NAME",
            description="A description",
            primary_formoid="DM",
            default_matrix_oid="DEFAULT",
            signature_prompt="I confirm.",
            delete_existing=True,
        )

        tested << Protocol()
        tested << StudyEventDef("OID", "Name", False, StudyEventDef.SCHEDULED)
        tested << FormDef("FORM_OID", "FORM_Name")
        tested << ItemGroupDef("IG_DEMO", "Demography")
        tested << ItemDef("ID_AGE", "Demography", DataType.Integer, 3)
        tested << CodeList("C_YESNO", "Yes No", DataType.String)
        tested << MdsolLabelDef("LABEL1", "first label")
        tested << MdsolConfirmationMessage("Form has been submitted!")
        tested << MdsolCustomFunctionDef("AlwaysTrue*", "return true;")
        tested << MdsolEditCheckDef("DM01")
        tested << MdsolDerivationDef("AGE")

        doc = obj_to_doc(tested)
        self.assertEqual(doc.tag, "MetaDataVersion")
        self.assertEqual("OID", doc.attrib["OID"])
        self.assertEqual("NAME", doc.attrib["Name"])
        self.assertEqual("A description", doc.attrib["Description"])
        self.assertEqual("DEFAULT", doc.attrib["mdsol:DefaultMatrixOID"])
        self.assertEqual("I confirm.", doc.attrib["mdsol:SignaturePrompt"])
        self.assertEqual("DM", doc.attrib["mdsol:PrimaryFormOID"])
        self.assertEqual("Yes", doc.attrib["mdsol:DeleteExisting"])
        self.assertEqual("Protocol", doc.getchildren()[0].tag)
        self.assertEqual("StudyEventDef", doc.getchildren()[1].tag)
        self.assertEqual("FormDef", doc.getchildren()[2].tag)
        self.assertEqual("ItemGroupDef", doc.getchildren()[3].tag)
        self.assertEqual("ItemDef", doc.getchildren()[4].tag)
        self.assertEqual("CodeList", doc.getchildren()[5].tag)
        self.assertEqual("mdsol:ConfirmationMessage", doc.getchildren()[6].tag)
        self.assertEqual("mdsol:LabelDef", doc.getchildren()[7].tag)
        self.assertEqual("mdsol:EditCheckDef", doc.getchildren()[8].tag)
        self.assertEqual("mdsol:DerivationDef", doc.getchildren()[9].tag)
        self.assertEqual("mdsol:CustomFunctionDef", doc.getchildren()[10].tag)
    def test_builder(self):
        tested = FormDef(
            "DM", "Demog", repeating=True, order_number=2, link_form_oid="FRM1", link_study_event_oid="EVT1"
        )

        tested << ItemGroupRef("ItemGroup1", 1)
        tested << MdsolHelpText("en", "This is a help text")
        tested << MdsolViewRestriction("DM")
        tested << MdsolEntryRestriction("CRA")

        doc = obj_to_doc(tested)
        self.assertEqual(doc.tag, "FormDef")
        self.assertEqual("DM", doc.attrib["OID"])
        self.assertEqual("Demog", doc.attrib["Name"])
        self.assertEqual("Yes", doc.attrib["Repeating"])
        self.assertEqual("2", doc.attrib["mdsol:OrderNumber"])
        # Would not see LinkFormOID and LinkStudyEventOID together, they are mutually exclusive. Just for coverage.
        self.assertEqual("FRM1", doc.attrib["mdsol:LinkFormOID"])
        self.assertEqual("EVT1", doc.attrib["mdsol:LinkStudyEventOID"])
        self.assertEqual("ItemGroupRef", doc.getchildren()[0].tag)
        self.assertEqual("mdsol:HelpText", doc.getchildren()[1].tag)
        self.assertEqual("mdsol:ViewRestriction", doc.getchildren()[2].tag)
        self.assertEqual("mdsol:EntryRestriction", doc.getchildren()[3].tag)
 def test_builder(self):
     """XML produced"""
     tested = BasicDefinitions()(MeasurementUnit("MU_OID", "MUNAME"))
     doc = obj_to_doc(tested)
     self.assertEqual(doc.tag, "BasicDefinitions")
     self.assertEqual(doc.getchildren()[0].tag, "MeasurementUnit")
 def test_builder(self):
     """XML produced"""
     tested = MeasurementUnit("MU_OID", "MU_NAME")(Symbol())
     doc = obj_to_doc(tested)
     self.assertEqual(doc.tag, "MeasurementUnit")
     self.assertEqual(doc.getchildren()[0].tag, "Symbol")
 def test_build(self):
     cm = MdsolConfirmationMessage("Form saved.")
     doc = obj_to_doc(cm)
     self.assertEqual("mdsol:ConfirmationMessage", doc.tag)
     self.assertEqual("Form saved.", doc.text)
 def test_lang_set(self):
     cm = MdsolConfirmationMessage("Form saved.", lang="en")
     doc = obj_to_doc(cm)
     self.assertEqual("en", doc.attrib["xml:lang"])