Ejemplo n.º 1
0
    def test_merge_silos_without_mapped_columns(self):
        mapping_data = """{
                        "0": {
                              "left_table_cols": [],
                              "right_table_col": "",
                              "merge_type": ""
                        },
                        "left_unmapped_cols": ["first name"],
                        "right_unmapped_cols": ["last name"]
                    }"""
        left_silo = self._create_silo('left_silo', 1, 'Bob', 'left')
        factories.UniqueFields(silo=left_silo, name='first name')

        right_silo = self._create_silo('right_silo', 1, 'Marley', 'right')
        factories.UniqueFields(silo=right_silo, name='number')

        merged_silo = factories.Silo(owner=self.user,
                                     name='merged_silo',
                                     public=True)

        response = merge_two_silos(mapping_data, left_silo.pk, right_silo.pk,
                                   merged_silo.pk)

        self.assertEqual(
            response, {
                'status':
                "danger",
                'message':
                "Both silos (%s, %s) must have the same "
                "column set as unique fields" %
                (left_silo.name, right_silo.name)
            })
Ejemplo n.º 2
0
    def test_merge_silo_with_datetime_unique_field(self):
        left_silo = self._create_silo('left_silo', 1, 'Bob', 'left')
        factories.UniqueFields(silo=left_silo, name='created_date')

        right_silo = self._create_silo('right_silo', 1, 'Marley', 'right')
        factories.UniqueFields(silo=right_silo, name='created_date')

        merged_silo = factories.Silo(owner=self.user,
                                     name='merged_silo',
                                     public=True)

        response = merge_two_silos(self.mapping_data, left_silo.pk,
                                   right_silo.pk, merged_silo.pk)

        self.assertEqual(response, {
            'status': "success",
            'message': "Merged data successfully"
        })

        merged_silo = Silo.objects.get(pk=merged_silo.pk)
        self.assertEqual(
            LabelValueStore.objects.filter(silo_id=merged_silo.pk).count(), 1)

        merged_silo_row = LabelValueStore.objects.get(silo_id=merged_silo.pk)
        self.assertEqual(merged_silo_row['first name'], 'Bob')
        self.assertEqual(merged_silo_row['last name'], 'Marley')
Ejemplo n.º 3
0
    def test_merge_silo_with_specified_merge_type(self):
        mapping_data = """{
                        "0": {
                              "left_table_cols": ["number", "points"],
                              "right_table_col": "number",
                              "merge_type": "Avg"
                        },
                        "left_unmapped_cols": [],
                        "right_unmapped_cols": []
                    }"""

        user = factories.User(username='******')
        left_silo = factories.Silo(owner=user, name='left_silo', public=True)
        left_silo_r = factories.LabelValueStore(silo_id=left_silo.pk)
        left_silo_r['number'] = 1
        left_silo_r['points'] = 5
        left_silo_r.save()
        left_silo_r2 = factories.LabelValueStore(silo_id=left_silo.pk)
        left_silo_r2['number'] = 2
        left_silo_r2['points'] = 7
        left_silo_r2.save()
        factories.UniqueFields(silo=left_silo, name='number')

        right_silo = factories.Silo(owner=user, name='right_silo', public=True)
        right_silo_r = factories.LabelValueStore(silo_id=right_silo.pk)
        right_silo_r['number'] = 1
        right_silo_r.save()
        right_silo_r2 = factories.LabelValueStore(silo_id=right_silo.pk)
        right_silo_r2['number'] = 2
        right_silo_r2.save()
        factories.UniqueFields(silo=right_silo, name='number')

        merged_silo = factories.Silo(owner=user,
                                     name='merged_silo',
                                     public=True)

        response = merge_two_silos(mapping_data, left_silo.pk, right_silo.pk,
                                   merged_silo.pk)

        self.assertEqual(response, {
            'status': "success",
            'message': "Merged data successfully"
        })

        merged_silo = Silo.objects.get(pk=merged_silo.pk)
        self.assertEqual(
            LabelValueStore.objects.filter(silo_id=merged_silo.pk).count(), 4)

        merged_silo_rows = LabelValueStore.objects.filter(
            silo_id=merged_silo.pk)
        self.assertEqual(merged_silo_rows[0]['number'], 1)
        self.assertEqual(merged_silo_rows[1]['number'], 2)
        self.assertEqual(merged_silo_rows[2]['number'], 3.0)
        self.assertEqual(merged_silo_rows[3]['number'], 4.5)
Ejemplo n.º 4
0
    def test_save_data_to_silo_skipped_rows(self):
        read_file = open('silo/tests/sample_data/test.csv')
        reader = CustomDictReader(read_file)
        lvs = factories.LabelValueStore()
        lvs.silo_id = self.silo.id
        lvs.save()
        save_data_to_silo(self.silo, reader, self.read)

        # create multiple lvs
        read_file = open('silo/tests/sample_data/test.csv')
        reader = CustomDictReader(read_file)
        lvs = factories.LabelValueStore()
        lvs.silo_id = self.silo.id
        lvs.save()
        save_data_to_silo(self.silo, reader, self.read)

        factories.UniqueFields(name='E-mail', silo=self.silo)
        skipped_rows = [
            '[email protected]', 'silo_id={}'.format(self.silo.id)
        ]
        expected_response = {'skipped_rows': set(skipped_rows), 'num_rows': 0}
        data = [{
            'First.Name': 'John',
            'Last.Name': 'Lennon',
            'E-mail': '*****@*****.**',
        }]

        result = save_data_to_silo(self.silo, data, self.read)
        self.assertEqual(result, expected_response)
Ejemplo n.º 5
0
 def test_save_data_to_silo_unique_field_no_lvs(self):
     read_file = open('silo/tests/sample_data/test.csv')
     reader = CustomDictReader(read_file)
     expected_response = {'skipped_rows': set([]), 'num_rows': 4}
     factories.UniqueFields(name='E-mail', silo=self.silo)
     result = save_data_to_silo(self.silo, reader, self.read)
     self.assertEqual(result, expected_response)
Ejemplo n.º 6
0
    def test_save_data_to_silo_unique_field(self):
        read_file = open('silo/tests/sample_data/test.csv')
        reader = CustomDictReader(read_file)
        lvs = factories.LabelValueStore()
        lvs.silo_id = self.silo.id
        lvs.save()
        expected_response = {'skipped_rows': set([]), 'num_rows': 1}

        save_data_to_silo(self.silo, reader, self.read)
        factories.UniqueFields(name='E-mail', silo=self.silo)
        data = [{
            'First.Name': 'John',
            'Last.Name': 'Lennon',
            'E-mail': '*****@*****.**',
        }]

        result = save_data_to_silo(self.silo, data, self.read)
        self.assertEqual(result, expected_response)
        lvss = LabelValueStore.objects.filter(silo_id=self.silo.id)
        count = 0
        for lvs in lvss:
            lvs_json = json.loads(lvs.to_json())
            if lvs_json.get('First_Name') == 'John':
                self.assertEqual(lvs_json.get('Last_Name'), 'Lennon')
                count += 1

        self.assertEqual(count, 1)
Ejemplo n.º 7
0
    def test_import_from_gsheet_helper_skipped_rows(
            self, mock_get_credential_obj, mock_get_authorized_service,
            mock_get_gsheet_metadata, mock_fetch_data_gsheet,
            mock_get_or_create_read):
        lvs = LabelValueStore()
        lvs.silo_id = self.silo.id
        lvs.save()
        data = [{
            'First.Name': 'John',
            'Last.Name': 'Doe',
            'E-mail': '*****@*****.**',
        }, {
            'First.Name': 'Bob',
            'Last.Name': 'Smith',
            'E-mail': '*****@*****.**',
        }]
        save_data_to_silo(self.silo, data, self.read)

        # create multiple lvs
        lvs = LabelValueStore()
        lvs.silo_id = self.silo.id
        lvs.save()
        save_data_to_silo(self.silo, data, self.read)

        factories.UniqueFields(name='E-mail', silo=self.silo)
        data = [
            ['First.Name', 'Last.Name', 'E-mail'],
            ['John', 'Lennon', '*****@*****.**'],
        ]
        expected_result = [{
            'silo_id': self.silo.id
        }, {
            'msg':
            'Skipped updating/adding records where '
            '[email protected],silo_id=1 because there are '
            'already multiple records.',
            'level':
            messages.WARNING
        }, {
            'msg': 'Operation successful',
            'level': messages.SUCCESS
        }]

        mock_get_credential_obj.return_value = Mock(OAuth2Credentials)
        mock_get_authorized_service.return_value = Mock()
        mock_get_gsheet_metadata.return_value = (Mock(), None)
        mock_fetch_data_gsheet.return_value = (data, None)
        mock_get_or_create_read.return_value = self.read

        result = gviews_v4.import_from_gsheet_helper(self.tola_user.user,
                                                     self.silo.id,
                                                     self.silo.name,
                                                     1234,
                                                     partialcomplete=True)
        self.assertEqual(result, ([], expected_result))
Ejemplo n.º 8
0
    def test_import_from_gsheet_helper_with_integer_unique_fields(
            self, mock_get_credential_obj, mock_get_authorized_service,
            mock_get_gsheet_metadata, mock_fetch_data_gsheet,
            mock_get_or_create_read):
        '''Import function should update existing data when it got new data with
        same unique field'''
        lvs = LabelValueStore()
        lvs.silo_id = self.silo.id
        lvs.save()
        data = [{
            'First.Name': 'John',
            'Last.Name': 'Doe',
            'Number': 1,
        }, {
            'First.Name': 'Bob',
            'Last.Name': 'Smith',
            'Number': 2,
        }]

        save_data_to_silo(self.silo, data, self.read)
        factories.UniqueFields(name='Number', silo=self.silo)

        data = [
            ['First.Name', 'Last.Name', 'Number'],
            ['John', 'Lennon', 1],
        ]
        expected_result = [{
            'silo_id': self.silo.id
        }, {
            'msg': 'Operation successful',
            'level': messages.SUCCESS
        }]

        mock_get_credential_obj.return_value = Mock(OAuth2Credentials)
        mock_get_authorized_service.return_value = Mock()
        mock_get_gsheet_metadata.return_value = (Mock(), None)
        mock_fetch_data_gsheet.return_value = (data, None)
        mock_get_or_create_read.return_value = self.read

        result = gviews_v4.import_from_gsheet_helper(self.hikaya_user.user,
                                                     self.silo.id,
                                                     self.silo.name, 1234)
        self.assertEqual(result, expected_result)

        lvss = LabelValueStore.objects.filter(silo_id=self.silo.id)
        count = 0
        for lvs in lvss:
            lvs_json = json.loads(lvs.to_json())
            if lvs_json.get('First_Name') == 'John':
                self.assertEqual(lvs_json.get('Last_Name'), 'Lennon')
                count += 1

        self.assertEqual(count, 1)
        self.assertEqual(lvss.count(), 3)
Ejemplo n.º 9
0
    def test_merge_silos_without_merged_silo(self):
        left_silo = self._create_silo('left_silo', 1, 'Bob', 'left')
        factories.UniqueFields(silo=left_silo, name='number')

        right_silo = self._create_silo('right_silo', 1, 'Marley', 'right')
        factories.UniqueFields(silo=right_silo, name='number')

        merged_silo_random_id = random.randint(1, 9999)

        response = merge_two_silos(self.mapping_data, left_silo.pk,
                                   right_silo.pk, merged_silo_random_id)

        self.assertEqual(
            response, {
                'status':
                "danger",
                'message':
                "Merged Silo does not exist: "
                "silo_id=%s" % merged_silo_random_id
            })
Ejemplo n.º 10
0
    def test_import_from_gsheet_helper_unique_fields(
            self, mock_get_credential_obj, mock_get_authorized_service,
            mock_get_gsheet_metadata, mock_fetch_data_gsheet,
            mock_get_or_create_read):
        lvs = LabelValueStore()
        lvs.silo_id = self.silo.id
        lvs.save()
        data = [{
            'First.Name': 'John',
            'Last.Name': 'Doe',
            'E-mail': '*****@*****.**',
        }, {
            'First.Name': 'Bob',
            'Last.Name': 'Smith',
            'E-mail': '*****@*****.**',
        }]

        save_data_to_silo(self.silo, data, self.read)
        factories.UniqueFields(name='E-mail', silo=self.silo)

        data = [
            ['First.Name', 'Last.Name', 'E-mail'],
            ['John', 'Lennon', '*****@*****.**'],
        ]
        expected_result = [{
            'silo_id': self.silo.id
        }, {
            'msg': 'Operation successful',
            'level': messages.SUCCESS
        }]

        mock_get_credential_obj.return_value = Mock(OAuth2Credentials)
        mock_get_authorized_service.return_value = Mock()
        mock_get_gsheet_metadata.return_value = (Mock(), None)
        mock_fetch_data_gsheet.return_value = (data, None)
        mock_get_or_create_read.return_value = self.read

        result = gviews_v4.import_from_gsheet_helper(self.tola_user.user,
                                                     self.silo.id,
                                                     self.silo.name, 1234)
        self.assertEqual(result, expected_result)

        lvss = LabelValueStore.objects.filter(silo_id=self.silo.id)
        count = 0
        for lvs in lvss:
            lvs_json = json.loads(lvs.to_json())
            if lvs_json.get('First_Name') == 'John':
                self.assertEqual(lvs_json.get('Last_Name'), 'Lennon')
                count += 1

        self.assertEqual(count, 1)
Ejemplo n.º 11
0
    def test_merge_silos_with_different_unique_fields(self):
        left_silo = self._create_silo('left_silo', 1, 'Bob', 'left')
        factories.UniqueFields(silo=left_silo, name='first name')

        right_silo = self._create_silo('right_silo', 1, 'Marley', 'right')
        factories.UniqueFields(silo=right_silo, name='number')

        merged_silo = factories.Silo(owner=self.user,
                                     name='merged_silo',
                                     public=True)

        response = merge_two_silos(self.mapping_data, left_silo.pk,
                                   right_silo.pk, merged_silo.pk)

        self.assertEqual(
            response, {
                'status':
                "danger",
                'message':
                "Both silos (%s, %s) must have the same "
                "column set as unique fields" %
                (left_silo.name, right_silo.name)
            })
Ejemplo n.º 12
0
    def test_merge_silos_without_right_silo(self):
        left_silo = self._create_silo('left_silo', 1, 'Bob', 'left')
        factories.UniqueFields(silo=left_silo, name='number')

        right_silo_random_id = random.randint(1, 9999)

        merged_silo = factories.Silo(owner=self.user,
                                     name='merged_silo',
                                     public=True)

        response = merge_two_silos(self.mapping_data, left_silo.pk,
                                   right_silo_random_id, merged_silo.pk)

        self.assertEqual(
            response, {
                'status':
                "danger",
                'message':
                "Right Silo does not exist: "
                "silo_id=%s" % right_silo_random_id
            })
Ejemplo n.º 13
0
    def test_merge_silos_without_unique_field_in_right_silo(self):
        left_silo = self._create_silo('left_silo', 1, 'Bob', 'left')
        factories.UniqueFields(silo=left_silo, name='number')

        right_silo = self._create_silo('right_silo', 1, 'Marley', 'right')

        merged_silo = factories.Silo(owner=self.user,
                                     name='merged_silo',
                                     public=True)

        response = merge_two_silos(self.mapping_data, left_silo.pk,
                                   right_silo.pk, merged_silo.pk)

        self.assertEqual(
            response, {
                'status':
                "danger",
                'message':
                "The silo, [%s], must have a unique "
                "column and it should be the same as the "
                "one specified in [%s] silo." %
                (right_silo.name, left_silo.name)
            })