class ParseRelationTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_relation_should_get_type(self):
        xml_string = '''<root Typ='some pre-defined type' AnnanTyp='other type'>some reference text</root>'''

        expected_data = {
            'typ': 'some pre-defined type',
            'referens': 'some reference text',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_relation(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_relation_should_get_AnnanTyp(self):
        xml_string = '''<root Typ='Egen relationsdefinition' AnnanTyp='other type'>some reference text</root>'''

        expected_data = {
            'typ': 'other type',
            'referens': 'some reference text',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_relation(root)

        self.assertDictEqual(data, expected_data)
class ParsePersonTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_person_simple_success(self):
        xml_string = '''
            <root>
                <Namn>some name</Namn>
                <Organisation>some org</Organisation>
                <Postadress>some post address</Postadress>
                <Postnummer>some post number</Postnummer>
                <Postort>some post ort</Postort>
                <Lang>some lang</Lang>
                <IDnummer>some idnr</IDnummer>
                <Telefon>12345</Telefon>
                <Fax>67890</Fax>
                <EPost>[email protected]</EPost>
                <SkyddadIdentitet>secret person</SkyddadIdentitet>
            </root>
        '''

        expected_data = {
            'namn': 'some name',
            'organisation': 'some org',
            'postadress': 'some post address',
            'postnummer': 'some post number',
            'postort': 'some post ort',
            'land': 'some lang',
            'id': 'some idnr',
            'telefon': '12345',
            'fax': '67890',
            'epost': '*****@*****.**',
            'skyddad_identitet': 'secret person',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_person(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_person_with_not_all_keys_should_catch_indexError(self):
        xml_string = '''
            <root>
                <Namn>some name</Namn>
                <Organisation>some org</Organisation>
                <Postadress>some post address</Postadress>
            </root>
        '''

        expected_data = {
            'namn': 'some name',
            'organisation': 'some org',
            'postadress': 'some post address',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_person(root)

        self.assertDictEqual(data, expected_data)
class ParseInitiatorTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_initiator_all_attributes_success(self):
        xml_string = '''
            <root>
                <subroot>
                    <Egenskap Namn='Namn'><Varde>some name</Varde></Egenskap>
                    <Egenskap Namn='Adress'><Varde>some post address</Varde></Egenskap>
                    <Egenskap Namn='Postnummer'><Varde>some zipcode</Varde></Egenskap>
                    <Egenskap Namn='Postort'><Varde>some post ort</Varde></Egenskap>
                    <Egenskap Namn='Personnummer'><Varde>some id nr</Varde></Egenskap>
                    <Egenskap Namn='Telefon'><Varde>12345</Varde></Egenskap>
                    <Egenskap Namn='Mobil'><Varde>67890</Varde></Egenskap>
                    <Egenskap Namn='E-post'><Varde>[email protected]</Varde></Egenskap>
                </subroot>
            </root>
        '''

        expected_data = {
            'name': 'some name',
            'address': 'some post address',
            'zipcode': 'some zipcode',
            'city': 'some post ort',
            'personal_identification_number': 'some id nr',
            'phone': '12345',
            'mobile_phone': '67890',
            'email': '*****@*****.**',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_initiator(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_initiator_with_not_all_keys_should_catch_indexError_and_continue(
            self):
        xml_string = '''
            <root>
                <subroot>
                    <Egenskap Namn='Namn'><Varde>some name</Varde></Egenskap>
                    <Egenskap Namn='Adress'><Varde>some post address</Varde></Egenskap>
                    <Egenskap Namn='Postnummer'><Varde>some zipcode</Varde></Egenskap>
                </subroot>
            </root>
        '''

        expected_data = {
            'name': 'some name',
            'address': 'some post address',
            'zipcode': 'some zipcode',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_initiator(root)

        self.assertDictEqual(data, expected_data)
 def setUp(self):
     self.importer = EardErmsImporter()
     self.archive = mock.Mock()
     self.archive.pk = uuid.uuid4()
     self.ip = mock.Mock()
     self.ip.pk = uuid.uuid4()
     self.importer.task = mock.Mock()
     self.importer.task.pk = uuid.uuid4()
     self.structure = Structure.objects.create()
     self.structure_unit = StructureUnit.objects.create(
         structure=self.structure, reference_code='some_klass_ref_2')
 def setUp(self):
     self.importer = EardErmsImporter()
     self.archive = mock.Mock()
     self.archive.pk = uuid.uuid4()
     self.ip = mock.Mock()
     self.ip.pk = uuid.uuid4()
     self.importer.task = mock.Mock()
     self.importer.task.pk = uuid.uuid4()
     self.errand = mock.Mock()
     self.errand.meta.id = 'some_errand_meta_id'
     self.errand._index._name = 'some_errand_index_name'
     self.errand.archive = self.archive.pk
     self.errand.ip = self.ip.pk
class GetActsRootTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def get_arkivobjekt_arende(self):
        return get_xml_root_from_string(get_xml_example_full()) \
            .xpath("*[local-name()='ArkivobjektListaArenden']")[0] \
            .xpath("*[local-name()='ArkivobjektArende']")[0]

    def test_get_acts_root_full_xml(self):
        root = self.get_arkivobjekt_arende()
        res = self.importer.get_acts_root(root)

        elem = res[0]
        self.assertEqual(len(res), 1)
        self.assertEqual(type(elem), etree._Element)
        self.assertEqual(elem.tag, 'ArkivobjektListaHandlingar')

    def test_get_acts_root_simple(self):
        xml_string = '''
            <root>
                <ArkivobjektListaHandlingar></ArkivobjektListaHandlingar>
            </root>
        '''
        root = get_xml_root_from_string(xml_string)

        res = self.importer.get_acts_root(root)

        elem = res[0]
        self.assertEqual(len(res), 1)
        self.assertEqual(type(elem), etree._Element)
        self.assertEqual(elem.tag, 'ArkivobjektListaHandlingar')

    def test_get_acts_root_simple_should_be_in_root(self):
        xml_string = '''
            <root>
                <ArkivobjektArende>
                    <ArkivobjektListaHandlingar></ArkivobjektListaHandlingar>
                </ArkivobjektArende>
            </root>
        '''
        root = get_xml_root_from_string(xml_string)

        res = self.importer.get_acts_root(root)

        self.assertEqual(res, [])
class ParseAgentTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_agent_simple_success(self):
        xml_string = '''
            <root>
                <Namn>some name</Namn>
                <Roll>some roll</Roll>
                <Enhetsnamn>some enhet</Enhetsnamn>
                <Organisationsnamn>some org</Organisationsnamn>
            </root>
        '''

        expected_data = {
            'namn': 'some name',
            'roll': 'some roll',
            'enhet': 'some enhet',
            'organisation': 'some org',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_agent(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_agent_with_not_all_keys_should_catch_indexError(self):
        xml_string = '''
            <root>
                <Namn>some name</Namn>
                <Roll>some roll</Roll>
            </root>
        '''

        expected_data = {
            'namn': 'some name',
            'roll': 'some roll',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_agent(root)

        self.assertDictEqual(data, expected_data)
class ParseEgnaElementTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_egna_element_with_one_level_of_element(self):
        xml_string = '''
            <root Namn='some name' DataTyp='some data type' Format='some format'>
                <EgnaElementBeskrivning>some description</EgnaElementBeskrivning>
            </root>
        '''

        expected_data = {
            'beskrivning': 'some description',
            'element': [],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_egna_element(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_egna_element_with_element(self):
        self.importer.parse_eget_element = mock.Mock(
            return_value={'dummy_element': 'dummy_value'})
        xml_string = '''
            <root Namn='some name' DataTyp='some data type' Format='some format'>
                <EgnaElementBeskrivning>some description</EgnaElementBeskrivning>
                <EgetElement></EgetElement>
            </root>
        '''

        expected_data = {
            'beskrivning': 'some description',
            'element': [{
                'dummy_element': 'dummy_value'
            }],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_egna_element(root)

        self.assertDictEqual(data, expected_data)
class GetErrandsRootTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_get_errands_root_full_xml(self):
        root = get_xml_root_from_string(get_xml_example_full())

        res = self.importer.get_errands_root(root)

        elem = res[0]
        self.assertEqual(len(res), 1)
        self.assertEqual(type(elem), etree._Element)
        self.assertEqual(elem.tag, 'ArkivobjektListaArenden')

    def test_get_errands_root_simple(self):
        xml_string = '''
            <root>
                <ArkivobjektListaArenden></ArkivobjektListaArenden>
            </root>
        '''
        root = get_xml_root_from_string(xml_string)

        res = self.importer.get_errands_root(root)

        elem = res[0]
        self.assertEqual(len(res), 1)
        self.assertEqual(type(elem), etree._Element)
        self.assertEqual(elem.tag, 'ArkivobjektListaArenden')

    def test_get_errands_root_simple_should_be_in_root(self):
        xml_string = '''
            <root>
                <Leveransobjekt>
                    <ArkivobjektListaArenden></ArkivobjektListaArenden>
                </Leveransobjekt>
            </root>
        '''
        root = get_xml_root_from_string(xml_string)

        res = self.importer.get_errands_root(root)

        self.assertEqual(res, [])
Exemple #10
0
    def test_update_progress_is_updating_the_task_progress_in_database(self):
        self.importer = EardErmsImporter()
        task = ProcessTask.objects.create(name="example.Foo",
                                          args=[1],
                                          params={'bar': 'baz'},
                                          progress=0)
        self.importer.task = task

        self.assertEqual(task.progress, 0)

        self.importer.update_progress(20)
        task.refresh_from_db()
        self.assertEqual(task.progress, 20)

        self.importer.update_progress(40)
        task.refresh_from_db()
        self.assertEqual(task.progress, 40)

        self.importer.update_progress(66.66)
        task.refresh_from_db()
        self.assertEqual(task.progress, 66)
Exemple #11
0
class ParseExtraIdTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_extra_id_with_no_text_should_return_None(self):
        xml_string = '''<root ExtraIDTyp='some id type'></root>'''

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_extra_id(root)

        self.assertEqual(data, None)

    def test_parse_extra_id_with_text_should_get_type_and_id(self):
        xml_string = '''<root ExtraIDTyp='some id type'>some_id_text</root>'''

        expected_data = {
            'typ': 'some id type',
            'id': 'some_id_text',
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_extra_id(root)

        self.assertDictEqual(data, expected_data)
Exemple #12
0
class ParseEgetElementTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_eget_element_with_one_level_of_element(self):
        xml_string = '''
            <root Namn='some name' DataTyp='some data type' Format='some format'>
                <Varde>some value</Varde>
            </root>
        '''

        expected_data = {
            'varde': 'some value',
            'namn': 'some name',
            'datatyp': 'some data type',
            'format': 'some format',
            'element': [],
            'egenskaper': [],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_eget_element(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_eget_element_with_no_Namn_attribute(self):
        xml_string = '''
            <root DataTyp='some data type' Format='some format'>
                <Varde>some value</Varde>
            </root>
        '''

        expected_data = {
            'varde': 'some value',
            'namn': None,
            'datatyp': 'some data type',
            'format': 'some format',
            'element': [],
            'egenskaper': [],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_eget_element(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_eget_element_with_egenskaper(self):
        self.importer.parse_egenskaper = mock.Mock(
            return_value={'dummy_egenskap': 'dummy_value'})
        xml_string = '''
            <root Namn='some name' DataTyp='some data type' Format='some format'>
                <Varde>some value</Varde>
                <Egenskaper>
                    <Egenskap>
                    </Egenskap>
                </Egenskaper>
            </root>
        '''

        expected_data = {
            'varde': 'some value',
            'namn': 'some name',
            'datatyp': 'some data type',
            'format': 'some format',
            'element': [],
            'egenskaper': [{
                'dummy_egenskap': 'dummy_value'
            }],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_eget_element(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_eget_element_with_name_prefix_should_remove_the_prefix(
            self):
        xml_string = '''
            <root Namn='Dokument/Ärende/some name' DataTyp='some data type' Format='some format'>
                <Varde>some value</Varde>
            </root>
        '''

        expected_data = {
            'varde': 'some value',
            'namn': 'some name',
            'datatyp': 'some data type',
            'format': 'some format',
            'element': [],
            'egenskaper': [],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_eget_element(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_eget_element_with_two_levels_of_element(self):
        xml_string = '''
            <root Namn='some name' DataTyp='some data type' Format='some format'>
                <Varde>some value</Varde>
                <EgetElement Namn='sub name 1' DataTyp='sub data type 1' Format='sub format 1'>
                    <Varde>sub value 1</Varde>
                </EgetElement>
                <EgetElement Namn='sub name 2' DataTyp='sub data type 2' Format='sub format 2'>
                    <Varde>sub value 2</Varde>
                </EgetElement>
            </root>
        '''

        expected_data = {
            'varde':
            'some value',
            'namn':
            'some name',
            'datatyp':
            'some data type',
            'format':
            'some format',
            'element': [
                {
                    'varde': 'sub value 1',
                    'namn': 'sub name 1',
                    'datatyp': 'sub data type 1',
                    'format': 'sub format 1',
                    'egenskaper': [],
                    'element': [],
                },
                {
                    'varde': 'sub value 2',
                    'namn': 'sub name 2',
                    'datatyp': 'sub data type 2',
                    'format': 'sub format 2',
                    'egenskaper': [],
                    'element': [],
                },
            ],
            'egenskaper': [],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_eget_element(root)

        self.assertDictEqual(data, expected_data)
Exemple #13
0
class ParseEgenskaperTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_egenskaper_with_one_level_of_egenskaper(self):
        xml_string = '''
            <root Namn='some name' DataTyp='some data type' Format='some format'>
                <Varde>some value</Varde>
            </root>
        '''

        expected_data = {
            'varde': 'some value',
            'namn': 'some name',
            'datatyp': 'some data type',
            'format': 'some format',
            'egenskaper': [],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_egenskaper(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_egenskaper_with_two_levels_of_egenskaper(self):
        xml_string = '''
            <root Namn='some name' DataTyp='some data type' Format='some format'>
                <Varde>some value</Varde>
                <Egenskaper>
                    <Egenskap Namn='sub name 1' DataTyp='sub data type 1' Format='sub format 1'>
                        <Varde>sub value 1</Varde>
                    </Egenskap>
                    <Egenskap Namn='sub name 2' DataTyp='sub data type 2' Format='sub format 2'>
                        <Varde>sub value 2</Varde>
                    </Egenskap>
                </Egenskaper>
            </root>
        '''

        expected_data = {
            'varde':
            'some value',
            'namn':
            'some name',
            'datatyp':
            'some data type',
            'format':
            'some format',
            'egenskaper': [
                {
                    'varde': 'sub value 1',
                    'namn': 'sub name 1',
                    'datatyp': 'sub data type 1',
                    'format': 'sub format 1',
                    'egenskaper': []
                },
                {
                    'varde': 'sub value 2',
                    'namn': 'sub name 2',
                    'datatyp': 'sub data type 2',
                    'format': 'sub format 2',
                    'egenskaper': []
                },
            ],
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_egenskaper(root)

        self.assertDictEqual(data, expected_data)
Exemple #14
0
class ParseGallringTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_gallring_when_gallras_is_true(self):
        xml_string = '''
            <root Gallras='true'>
                <GallringsFrist>some g deadline</GallringsFrist>
                <GallringsForklaring>some g desc</GallringsForklaring>
                <GallringsPeriodSlut>some period end</GallringsPeriodSlut>
            </root>
        '''

        expected_data = {
            'frist': 'some g deadline',
            'forklaring': 'some g desc',
            'period_slut': 'some period end',
            'gallras': True,
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_gallring(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_gallring_when_gallras_is_false(self):
        xml_string = '''
            <root gallras='false'>
                <GallringsFrist>some g deadline</GallringsFrist>
                <GallringsForklaring>some g desc</GallringsForklaring>
                <GallringsPeriodSlut>some period end</GallringsPeriodSlut>
            </root>
        '''

        expected_data = {
            'frist': 'some g deadline',
            'forklaring': 'some g desc',
            'period_slut': 'some period end',
            'gallras': False,
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_gallring(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_gallring_when_not_all_keys_exists_should_catch_IndexError_and_continue(
            self):
        xml_string = '''
            <root gallras='false'>
                <GallringsFrist>some g deadline</GallringsFrist>
                <GallringsForklaring>some g desc</GallringsForklaring>
            </root>
        '''

        expected_data = {
            'frist': 'some g deadline',
            'forklaring': 'some g desc',
            'gallras': False,
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_gallring(root)

        self.assertDictEqual(data, expected_data)
Exemple #15
0
class ParseRestrictionTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_restriction_without_AnnanTyp_attr_should_get_Typ_and_all_texts(
            self):
        xml_string = '''
            <root Typ='some type'>
                <ForklarandeText>some desc text</ForklarandeText>
                <Lagrum>some lagrum</Lagrum>
                <RestriktionsDatum>some expiration date</RestriktionsDatum>
            </root>
        '''

        expected_data = {
            'beskrivning': 'some desc text',
            'lagrum': 'some lagrum',
            'upphor': 'some expiration date',
            'typ': 'some type'
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_restriction(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_restriction_without_some_keys_should_catch_IndexError_and_continue(
            self):
        xml_string = '''
            <root Typ='some type'>
                <ForklarandeText>some desc text</ForklarandeText>
                <Lagrum>some lagrum</Lagrum>
            </root>
        '''

        expected_data = {
            'beskrivning': 'some desc text',
            'lagrum': 'some lagrum',
            'typ': 'some type'
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_restriction(root)

        self.assertDictEqual(data, expected_data)

    def test_parse_restriction_with_AnnanTyp_attr_should_get_AnnanTyp_and_all_texts(
            self):
        xml_string = '''
            <root Typ='some type' AnnanTyp='some other type'>
                <ForklarandeText>some desc text</ForklarandeText>
                <Lagrum>some lagrum</Lagrum>
                <RestriktionsDatum>some expiration date</RestriktionsDatum>
            </root>
        '''

        expected_data = {
            'beskrivning': 'some desc text',
            'lagrum': 'some lagrum',
            'upphor': 'some expiration date',
            'typ': 'some other type'
        }

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_restriction(root)

        self.assertDictEqual(data, expected_data)
Exemple #16
0
class ParseActTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()
        self.archive = mock.Mock()
        self.archive.pk = uuid.uuid4()
        self.ip = mock.Mock()
        self.ip.pk = uuid.uuid4()
        self.importer.task = mock.Mock()
        self.importer.task.pk = uuid.uuid4()
        self.errand = mock.Mock()
        self.errand.meta.id = 'some_errand_meta_id'
        self.errand._index._name = 'some_errand_index_name'
        self.errand.archive = self.archive.pk
        self.errand.ip = self.ip.pk

    def test_parse_act_when_all_elements_exists(self):
        expected_data = get_full_expected_data_parse_act(
            str(self.importer.task.pk), self.ip.pk, self.archive.pk)

        root = self.get_arkivobjekt_handling()
        component = self.importer.parse_act(root, self.errand)

        # Check that all expected data is part of the component.
        self.assertLessEqual(expected_data.items(),
                             component.to_dict().items())

    def get_arkivobjekt_handling(self):
        return get_xml_root_from_string(get_xml_example_full()) \
            .xpath("*[local-name()='ArkivobjektListaHandlingar']")[0] \
            .xpath("*[local-name()='ArkivobjektHandling']")[0]

    def test_parse_act_when_Gallring_element_is_missing_should_catch_the_exception_and_continue(
            self):
        expected_data = get_full_expected_data_parse_act(
            str(self.importer.task.pk), self.ip.pk, self.archive.pk)
        expected_data.pop('gallring')

        root = self.get_arkivobjekt_handling()

        # Remove 'Gallring' tag
        gallring = root.xpath("*[local-name()='Gallring']")[0]
        gallring.getparent().remove(gallring)
        # Make sure there is no more 'Gallring'
        self.assertEqual(root.xpath("*[local-name()='Gallring']"), [])

        component = self.importer.parse_act(root, self.errand)

        # Check that all expected data is part of the component.
        self.assertEqual(component.to_dict().get('gallring'), None)
        self.assertLessEqual(expected_data.items(),
                             component.to_dict().items())

    def test_parse_act_when_ExtraID_tag_has_no_text_then_should_not_add_to_data(
            self):
        expected_data = get_full_expected_data_parse_act(
            str(self.importer.task.pk), self.ip.pk, self.archive.pk)
        expected_data.pop('extra_ids')

        root = self.get_arkivobjekt_handling()

        # Remove text for 'ExtraID' tag
        root.xpath("*[local-name()='ExtraID']")[0].clear()
        # Make sure 'ExtraID' text is cleared
        self.assertEqual(root.xpath("*[local-name()='ExtraID']")[0].text, None)

        component = self.importer.parse_act(root, self.errand)

        # Check that all expected data is part of the component.
        self.assertEqual(component.to_dict().get('extra_ids'), None)
        self.assertLessEqual(expected_data.items(),
                             component.to_dict().items())
Exemple #17
0
class ParseErrandTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()
        self.archive = mock.Mock()
        self.archive.pk = uuid.uuid4()
        self.ip = mock.Mock()
        self.ip.pk = uuid.uuid4()
        self.importer.task = mock.Mock()
        self.importer.task.pk = uuid.uuid4()
        self.structure = Structure.objects.create()
        self.structure_unit = StructureUnit.objects.create(
            structure=self.structure, reference_code='some_klass_ref_2')

    @mock.patch('ESSArch_Core.search.importers.earderms.logger')
    def test_parse_errand_when_no_structure_unit_exists_then_raise_exception(
            self, mock_logger):

        xml_string = '''
            <root>
                <ArkivobjektID>some_id</ArkivobjektID>
                <KlassReferens>some_ref</KlassReferens>
            </root>
        '''

        root = get_xml_root_from_string(xml_string)
        with self.assertRaises(StructureUnit.DoesNotExist):
            self.importer.parse_errand(root, self.archive, self.ip, None)

        mock_logger.exception.assert_called_once_with(
            'Structure unit some_ref not found in None')

    def test_parse_errand_when_all_elements_exists(self):
        expected_data = get_full_expected_data_parse_errand(
            str(self.importer.task.pk), self.ip.pk, str(self.archive.pk),
            str(self.structure_unit.pk))

        root = self.get_arkiv_objekt_arende()
        component, structure_unit = self.importer.parse_errand(
            root, self.archive, self.ip, self.structure)

        self.assertEqual(structure_unit, self.structure_unit)
        # Check that all expected data is part of the component.
        self.assertLessEqual(expected_data.items(),
                             component.to_dict().items())

    def get_arkiv_objekt_arende(self):
        return get_xml_root_from_string(get_xml_example_full()) \
            .xpath("*[local-name()='ArkivobjektListaArenden']")[0] \
            .xpath("*[local-name()='ArkivobjektArende']")[0]

    def test_parse_errand_when_only_the_elementary_elements_exists(self):
        xml_string = '''
            <root>
                <ArkivobjektID>some_id</ArkivobjektID>
                <KlassReferens>some_klass_ref_2</KlassReferens>
            </root>
        '''

        expected_data = {
            'klassreferens': 'some_klass_ref_2',
            'arkivobjekt_id': 'some_id',
            'ip': self.ip.pk,
            'archive': str(self.archive.pk),
            'task_id': str(self.importer.task.pk),
            'structure_unit': str(self.structure_unit.pk),
            'reference_code': 'some_id',
        }

        root = get_xml_root_from_string(xml_string)
        component, structure_unit = self.importer.parse_errand(
            root, self.archive, self.ip, self.structure)

        self.assertEqual(structure_unit, self.structure_unit)
        # Check that all expected data is part of the component.
        self.assertLessEqual(expected_data.items(),
                             component.to_dict().items())

    def test_parse_errand_when_all_elements_exists_and_ip_is_None(self):
        expected_data = get_full_expected_data_parse_errand(
            str(self.importer.task.pk), self.ip.pk, str(self.archive.pk),
            str(self.structure_unit.pk))
        # if ip is None
        expected_data.pop('ip')

        root = self.get_arkiv_objekt_arende()
        component, structure_unit = self.importer.parse_errand(
            root, self.archive, None, self.structure)

        self.assertEqual(structure_unit, self.structure_unit)
        # Check that all expected data is part of the component.
        self.assertLessEqual(expected_data.items(),
                             component.to_dict().items())

    def test_parse_errand_when_ip_is_not_None_but_has_no_pk_attribute_should_raise_exception(
            self):
        root = self.get_arkiv_objekt_arende()

        with self.assertRaises(AttributeError):
            self.importer.parse_errand(root, self.archive, 13, self.structure)

    def test_parse_errand_when_element_Motpart_is_missing_should_pass(self):
        root = self.get_arkiv_objekt_arende()

        # Remove 'Motpart' tag
        motpart = root.xpath("*[local-name()='Motpart']")[0]
        motpart.getparent().remove(motpart)
        # Make sure there is no more 'Motpart'
        self.assertEqual(root.xpath("*[local-name()='Motpart']"), [])

        expected_data = get_full_expected_data_parse_errand(
            str(self.importer.task.pk), self.ip.pk, str(self.archive.pk),
            str(self.structure_unit.pk))
        expected_data.pop('motpart')

        component, structure_unit = self.importer.parse_errand(
            root, self.archive, self.ip, self.structure)

        self.assertEqual(structure_unit, self.structure_unit)
        # Check that all expected data is part of the component.
        self.assertLessEqual(expected_data.items(),
                             component.to_dict().items())
Exemple #18
0
 def setUp(self):
     self.importer = EardErmsImporter()
Exemple #19
0
class ParseMappingsTests(TestCase):
    def setUp(self):
        self.importer = EardErmsImporter()

    def test_parse_mappings_single_elements(self):
        xml_string = '''
            <root>
                <Bar>some text</Bar>
            </root>
        '''

        mappings = {'bar': 'Bar'}

        expected_data = {'bar': 'some text'}

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_mappings(mappings, root)

        self.assertDictEqual(data, expected_data)

    def test_parse_mappings_missing_key_should_catch_IndexError_and_continue(
            self):
        xml_string = '''
            <root>
                <Foo>some foo text</Foo>
                <Bar>some bar text</Bar>
            </root>
        '''

        mappings = {
            'bar': 'Bar',
            'foobar': 'Foobar',
        }

        expected_data = {'bar': 'some bar text'}

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_mappings(mappings, root)

        self.assertDictEqual(data, expected_data)

    def test_parse_mappings_multiple_values_should_return_the_first_mappings_value(
            self):
        xml_string = '''
            <root>
                <Foo>some foo text</Foo>
                <Bar>some bar text</Bar>
            </root>
        '''

        mappings = {'any_foo_bar': ['Bar', 'Foo']}

        expected_data = {'any_foo_bar': 'some bar text'}

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_mappings(mappings, root)

        self.assertDictEqual(data, expected_data)

    def test_parse_mappings_multiple_if_first_not_found_get_next_value(self):
        xml_string = '''
            <root>
                <Foo>some foo text</Foo>
            </root>
        '''

        mappings = {'any_foo_bar': ['Bar', 'Foo']}

        expected_data = {'any_foo_bar': 'some foo text'}

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_mappings(mappings, root)

        self.assertDictEqual(data, expected_data)

    def test_parse_mappings_if_no_element_found_should_return_empty_dict(self):
        xml_string = '''
            <root>
                <Foo>some foo text</Foo>
                <Foobar>some foo text</Foobar>
            </root>
        '''

        mappings = {'bar': 'Bar'}

        expected_data = {}

        root = get_xml_root_from_string(xml_string)
        data = self.importer.parse_mappings(mappings, root)

        self.assertDictEqual(data, expected_data)