def test_get_supplier_users_can_filter_by_supplier_id(
            self, mock_data_client):
        data = SupplierFrameworkData(mock_data_client,
                                     "g-cloud-11",
                                     supplier_ids=[2])

        mock_data_client.export_users.return_value = {
            "users": [
                {
                    "id": 1,
                    "supplier_id": 1
                },
                {
                    "id": 2,
                    "supplier_id": 2
                },
                {
                    "id": 3,
                    "supplier_id": 1
                },
            ]
        }
        assert data.get_supplier_users() == {
            2: [{
                "id": 2,
                "supplier_id": 2
            }],
        }
    def test_get_supplier_users_returns_dict_of_users_grouped_by_supplier(
            self, mock_data_client):
        data = SupplierFrameworkData(mock_data_client, "g-cloud-11")

        mock_data_client.export_users.return_value = {
            "users": [
                {
                    "id": 1,
                    "supplier_id": 1
                },
                {
                    "id": 2,
                    "supplier_id": 2
                },
                {
                    "id": 3,
                    "supplier_id": 1
                },
            ]
        }
        assert data.get_supplier_users() == {
            1: [{
                "id": 1,
                "supplier_id": 1
            }, {
                "id": 3,
                "supplier_id": 1
            }],
            2: [{
                "id": 2,
                "supplier_id": 2
            }],
        }
Ejemplo n.º 3
0
def main(data_api_client, mailchimp_client, lot_data, logger):
    logger.info(
        "Begin mailchimp email list updating process for {} lot".format(
            lot_data["lot_slug"]),
        extra={"lot_data": lot_data})

    data_helper = SupplierFrameworkData(data_api_client,
                                        lot_data["framework_slug"])
    supplier_users = data_helper.get_supplier_users()
    framework_services = data_api_client.find_services_iter(
        framework=lot_data["framework_slug"], lot=lot_data["lot_slug"])

    emails = frozenset(
        x.lower()
        for x in find_user_emails(supplier_users, framework_services))
    logger.info("{} emails have been found for lot {}".format(
        len(emails), lot_data["lot_slug"]))

    existing_mailchimp_emails = mailchimp_client.get_email_addresses_from_list(
        lot_data["list_id"])

    # lowercase required because mailchimp may capatalise emails addresses returned from the mailchimp API based on it's
    # on how it stores both the lowercase hash but also the original (potentially capatilised) email address
    new_emails = set(emails).difference(x.lower()
                                        for x in existing_mailchimp_emails)
    logger.info("Subscribing {} new emails to mailchimp list {}".format(
        len(new_emails), lot_data["list_id"]))
    if not mailchimp_client.subscribe_new_emails_to_list(
            lot_data["list_id"], new_emails):
        return False

    return True
    def test_get_supplier_frameworks_can_filter_by_supplier_ids(self, mock_data_client):
        data = SupplierFrameworkData(mock_data_client, "g-cloud-11", supplier_ids=[2])

        mock_data_client.find_framework_suppliers_iter.return_value = [
            {"supplierId": 1},
            {"supplierId": 2},
        ]
        assert data.get_supplier_frameworks() == [{"supplierId": 2}]
    def test_get_supplier_frameworks_returns_framework_suppliers(
            self, mock_data_client):
        data = SupplierFrameworkData(mock_data_client, "g-cloud-11")

        mock_data_client.find_framework_suppliers_iter.return_value = [
            mock.sentinel.framework_suppliers
        ]
        assert data.get_supplier_frameworks() == [
            mock.sentinel.framework_suppliers
        ]
    def test_populate_data_can_filter_by_supplier_ids(self, mock_data_client):
        data = SupplierFrameworkData(mock_data_client, "g-cloud-11", supplier_ids=[2])

        mock_data_client.find_framework_suppliers_iter.return_value = [
            {"supplierId": 1},
            {"supplierId": 2},
        ]
        mock_data_client.export_users.return_value = {"users": [
            {"id": 1, "supplier_id": 1},
            {"id": 2, "supplier_id": 2},
            {"id": 3, "supplier_id": 1},
        ]}

        data.populate_data()

        assert data.data == [{"supplierId": 2, "users": [{"id": 2, "supplier_id": 2}], "draft_services": []}]
        assert mock_data_client.find_draft_services_iter.call_args_list == [mock.call(2, framework="g-cloud-11")]