def _check_uac_qid_pair_located_in_welsh_ce_estab_cases(matching_rows, uac, value):
    # checks ind qid type for CE Estab Welsh in Welsh case and then tests against passed rows

    if uac['payload']['uac']['questionnaireId'][:2] == '23':
        expected_welsh_line_ending = f"|{uac['payload']['uac']['uac']}|" \
                                     f"{uac['payload']['uac']['questionnaireId']}|{value['line_ending']}"
        matched = False
        for row in matching_rows:
            if row.endswith(expected_welsh_line_ending):
                matched = True

        test_helper.assertTrue(matched,
                               f'Could not find expected Welsh line ending {expected_welsh_line_ending}')

    else:
        expected_english_line_start = f"{uac['payload']['uac']['uac']}|" \
                                      f"{uac['payload']['uac']['questionnaireId']}|"
        matched = False
        for row in matching_rows:
            if row.startswith(expected_english_line_start):
                matched = True

        test_helper.assertTrue(matched,
                               f'Could not find expected English line starting '
                               f'{expected_english_line_start}')
示例#2
0
def check_the_cases_via_case_api(context):
    for row in context.bulk_address_updates:
        actual_case = get_case_and_case_events_by_case_id(row['CASE_ID'])

        # Check all the fields available in the case API are updated
        test_helper.assertEqual(actual_case['estabType'], row['ESTAB_TYPE'])
        test_helper.assertEqual(actual_case['oa'], row['OA'])
        test_helper.assertEqual(actual_case['lsoa'], row['LSOA'])
        test_helper.assertEqual(actual_case['msoa'], row['MSOA'])
        test_helper.assertEqual(actual_case['lad'], row['LAD'])
        test_helper.assertEqual(actual_case['latitude'], row['LATITUDE'])
        test_helper.assertEqual(actual_case['longitude'], row['LONGITUDE'])
        test_helper.assertTrue(actual_case['secureEstablishment'],
                               'Secure flag should be changed to true')
        test_helper.assertEqual(actual_case['uprn'], row['UPRN'])
        test_helper.assertEqual(actual_case['estabUprn'], row['ESTAB_UPRN'])
        test_helper.assertEqual(actual_case['addressLine1'],
                                row['ADDRESS_LINE1'])
        test_helper.assertEqual(actual_case['addressLine2'],
                                row['ADDRESS_LINE2'])
        test_helper.assertEqual(actual_case['addressLine3'],
                                row['ADDRESS_LINE3'])
        test_helper.assertEqual(actual_case['abpCode'], row['ABP_CODE'])
        test_helper.assertEqual(actual_case['organisationName'],
                                row['ORGANISATION_NAME'])
        test_helper.assertEqual(actual_case['postcode'], row['POSTCODE'])
        test_helper.assertEqual(actual_case['townName'], row['TOWN_NAME'])
示例#3
0
def undelivered_qm_published_to_gcp_pubsub(context):
    context.first_case = context.case_created_events[0]['payload'][
        'collectionCase']
    questionnaire_id = context.uac_created_events[0]['payload']['uac'][
        'questionnaireId']
    _publish_qm_undelivered_mail(context, questionnaire_id=questionnaire_id)
    test_helper.assertTrue(context.sent_to_gcp)
def check_uac_message_is_received(context):
    context.messages_received = []
    context.expected_message_received = False
    start_listening_to_rabbit_queue(
        Config.RABBITMQ_RH_OUTBOUND_UAC_QUEUE,
        functools.partial(_uac_callback, context=context))

    test_helper.assertTrue(context.expected_message_received)
示例#5
0
def validate_ccs_qid_for_case_id(context):
    response_json = get_ccs_qid_for_case_id(context.ccs_case['id'])
    test_helper.assertEqual(
        response_json['questionnaireId'][0:3], '713',
        'CCS QID has incorrect questionnaire type or tranche ID')
    test_helper.assertTrue(response_json['active'])
    test_helper.assertEqual(
        response_json['formType'], "H",
        f'Expected FormType is "H" but got "{response_json["formType"]}"')
def receipt_ccs_offline_msg_published_to_gcp_pubsub(context):
    context.first_case = context.ccs_case

    # TODO: Other tests match on this key structure. Remove when we've settled on case API fields
    context.first_case['survey'] = context.ccs_case['surveyType']

    response = get_ccs_qid_for_case_id(context.ccs_case['id'])
    _publish_object_finalize(context, questionnaire_id=response['questionnaireId'])
    test_helper.assertTrue(context.sent_to_gcp)
示例#7
0
def _validate_case(parsed_body):
    test_helper.assertEqual('CENSUS',
                            parsed_body['payload']['collectionCase']['survey'])
    actual_case_ref = parsed_body['payload']['collectionCase']['caseRef']
    test_helper.assertEqual(10, len(actual_case_ref))
    parse_datetime(parsed_body['payload']['collectionCase']['createdDateTime'])
    parse_datetime(parsed_body['payload']['collectionCase']['lastUpdated'])

    test_helper.assertTrue(luhn.verify(actual_case_ref))
def check_case_events(context):
    response = requests.get(
        f'{Config.CASE_API_CASE_URL}{context.first_case["id"]}',
        params={'caseEvents': True})
    test_helper.assertTrue(200 <= response.status_code <= 299,
                           'Get cases API call failed')
    cases = response.json()
    test_helper.assertTrue(
        any(case_event['description'] == 'Fulfilment Request Received'
            for case_event in cases['caseEvents']))
示例#9
0
def new_addresses_sent_to_field_secureType_true(context):
    context.messages_received = []
    start_listening_to_rabbit_queue(Config.RABBITMQ_OUTBOUND_FIELD_QUEUE,
                                    functools.partial(
                                        store_all_msgs_in_context, context=context,
                                        expected_msg_count=1))

    field_msg = context.messages_received[0]
    test_helper.assertEqual(field_msg['actionInstruction'], 'CREATE')
    test_helper.assertTrue(field_msg['secureEstablishment'])
def receipt_msg_published_to_gcp_pubsub(context):
    context.first_case = context.case_created_events[0]['payload']['collectionCase']
    for uac in context.uac_created_events:
        if uac['payload']['uac']['caseId'] == context.first_case['id']:
            questionnaire_id = uac['payload']['uac']['questionnaireId']
            break
    else:
        test_helper.fail('Could not find UAC_UPDATED event for receipted case')

    _publish_object_finalize(context, questionnaire_id=questionnaire_id)
    test_helper.assertTrue(context.sent_to_gcp)
示例#11
0
def check_survey_launched_case_updated_events(context, case_ids):
    context.messages_received = []
    start_listening_to_rabbit_queue(
        Config.RABBITMQ_RH_OUTBOUND_CASE_QUEUE,
        functools.partial(store_all_msgs_in_context,
                          context=context,
                          expected_msg_count=len(case_ids),
                          type_filter='CASE_UPDATED'))
    for message in context.messages_received:
        test_helper.assertTrue(
            message['payload']['collectionCase']['surveyLaunched'],
            (f'Expected to find {len(case_ids)} CASE_UPDATED events as a result of survey launches '
             f'found event with "surveyLaunched"=False, cases expected={case_ids}'
             ))
        test_helper.assertIn(message['payload']['collectionCase']['id'],
                             case_ids, 'Found event for unexpected case')
def compare_case_and_uac(context, questionnaire_type, uac):
    for caze in context.print_cases:
        if caze['id'] == uac['payload']['uac']['caseId']:
            test_helper.assertTrue(
                uac['payload']['uac']['questionnaireId'].startswith(
                    questionnaire_type),
                'Fulfilment request UAC updated event found with wrong questionnaire type'
            )
            context.requested_uac_and_qid.append({
                'qid':
                uac['payload']['uac']['questionnaireId'],
                'uac':
                uac['payload']['uac']['uac'],
                'case':
                caze
            })
示例#13
0
def check_address_invalid_case_updated_events(context):
    address_invalid_case_ids = set(context.bulk_invalid_addresses.keys())
    case_updated_events = get_case_updated_events(
        context, len(address_invalid_case_ids))
    test_helper.assertEqual(len(case_updated_events),
                            len(context.bulk_invalid_addresses))
    for event in case_updated_events:
        test_helper.assertTrue(
            event['payload']['collectionCase']['addressInvalid'],
            'Address invalid flag must be "True" on all updated events')
        test_helper.assertIn(event['payload']['collectionCase']['id'],
                             address_invalid_case_ids,
                             'Unexpected case ID found on updated event')

    context.bulk_invalid_address_file.unlink()
    if Config.BULK_INVALID_ADDRESS_BUCKET_NAME:
        clear_bucket(Config.BULK_INVALID_ADDRESS_BUCKET_NAME)
示例#14
0
def check_new_cases_are_emitted(context):
    test_helper.assertGreater(
        len(context.bulk_new_addresses), 0,
        'Must have at least one new address for this test to be valid')

    context.case_created_events = get_case_created_events(
        context, len(context.bulk_new_addresses))
    test_helper.assertEqual(
        len(context.case_created_events), len(context.bulk_new_addresses),
        'Number of created cases should match number supplied in the bulk file'
    )

    for address in context.bulk_new_addresses:
        test_helper.assertTrue(
            any([
                new_address_matches_case_created(address, case_created_event)
                for case_created_event in context.case_created_events
            ]), f'No case created event found for address: {address}')

    if Config.BULK_NEW_ADDRESS_BUCKET_NAME:
        clear_bucket(Config.BULK_NEW_ADDRESS_BUCKET_NAME)
示例#15
0
def new_addresses_sent_to_field(context):
    expected_case_ids = [
        event['payload']['collectionCase']['id']
        for event in context.case_created_events
    ]

    context.messages_received = []
    start_listening_to_rabbit_queue(
        Config.RABBITMQ_OUTBOUND_FIELD_QUEUE,
        functools.partial(store_all_msgs_in_context,
                          context=context,
                          expected_msg_count=len(context.case_created_events)))

    for field_msg in context.messages_received:
        test_helper.assertEqual(field_msg['actionInstruction'], 'CREATE')
        test_helper.assertTrue(field_msg['undeliveredAsAddress'])

        for expected_case_id in expected_case_ids:
            if field_msg['caseId'] == expected_case_id:
                expected_case_ids.remove(expected_case_id)
                break

    test_helper.assertEqual(len(expected_case_ids), 0,
                            'Not all new addresses accounted for')
示例#16
0
def gather_uac_updated_events(context, number_of_matching_cases,
                              questionnaire_type):
    start_listening_to_rabbit_queue(
        Config.RABBITMQ_RH_OUTBOUND_UAC_QUEUE,
        functools.partial(
            store_all_uac_updated_msgs_by_collection_exercise_id,
            context=context,
            expected_msg_count=int(number_of_matching_cases),
            collection_exercise_id=context.collection_exercise_id))
    test_helper.assertEqual(len(context.messages_received),
                            int(number_of_matching_cases))
    context.reminder_uac_updated_events = context.messages_received.copy()
    for uac_updated_event in context.reminder_uac_updated_events:
        test_helper.assertTrue(
            uac_updated_event['payload']['uac']['questionnaireId'].startswith(
                questionnaire_type),
            f"Exoected QIDs to have type {questionnaire_type}, "
            f"found QID {uac_updated_event['payload']['uac']['questionnaireId']}"
        )
    context.reminder_case_ids = {
        uac['payload']['uac']['caseId']
        for uac in context.reminder_uac_updated_events
    }
    context.messages_received = []
def send_receipt_for_unaddressed(context):
    _publish_offline_receipt(context, questionnaire_id=context.expected_questionnaire_id)
    test_helper.assertTrue(context.sent_to_gcp)
示例#18
0
def check_address_update_case_updated_events(context):
    address_update_case_ids = set(row['CASE_ID']
                                  for row in context.bulk_address_updates)
    context.case_updated_events = get_case_updated_events(
        context, len(address_update_case_ids))
    test_helper.assertEqual(len(context.case_updated_events),
                            len(context.bulk_address_updates))
    for event in context.case_updated_events:
        collection_case = event['payload']['collectionCase']
        test_helper.assertIn(collection_case['id'], address_update_case_ids,
                             'Unexpected case ID found on updated event')
        test_helper.assertEqual(
            collection_case['treatmentCode'],
            context.bulk_address_updates[0]['TREATMENT_CODE'])
        test_helper.assertEqual(collection_case['address']['estabType'],
                                context.bulk_address_updates[0]['ESTAB_TYPE'])
        test_helper.assertEqual(collection_case['oa'],
                                context.bulk_address_updates[0]['OA'])
        test_helper.assertEqual(collection_case['lsoa'],
                                context.bulk_address_updates[0]['LSOA'])
        test_helper.assertEqual(collection_case['msoa'],
                                context.bulk_address_updates[0]['MSOA'])
        test_helper.assertEqual(collection_case['lad'],
                                context.bulk_address_updates[0]['LAD'])
        test_helper.assertEqual(
            collection_case['fieldCoordinatorId'],
            context.bulk_address_updates[0]['FIELDCOORDINATOR_ID'])
        test_helper.assertEqual(
            collection_case['fieldOfficerId'],
            context.bulk_address_updates[0]['FIELDOFFICER_ID'])
        test_helper.assertEqual(collection_case['address']['latitude'],
                                context.bulk_address_updates[0]['LATITUDE'])
        test_helper.assertEqual(collection_case['address']['longitude'],
                                context.bulk_address_updates[0]['LONGITUDE'])
        test_helper.assertTrue(
            collection_case['metadata']['secureEstablishment'],
            'Secure flag should be changed to true')
        test_helper.assertEqual(collection_case['printBatch'],
                                context.bulk_address_updates[0]['PRINT_BATCH'])
        test_helper.assertEqual(
            collection_case['ceExpectedCapacity'],
            int(context.bulk_address_updates[0]['CE_EXPECTED_CAPACITY']))
        test_helper.assertEqual(
            collection_case['htcWillingness'],
            context.bulk_address_updates[0]['HTC_WILLINGNESS'])
        test_helper.assertEqual(collection_case['htcDigital'],
                                context.bulk_address_updates[0]['HTC_DIGITAL'])
        test_helper.assertEqual(collection_case['address']['uprn'],
                                context.bulk_address_updates[0]['UPRN'])
        test_helper.assertEqual(collection_case['address']['estabUprn'],
                                context.bulk_address_updates[0]['ESTAB_UPRN'])
        test_helper.assertEqual(
            collection_case['address']['addressLine1'],
            context.bulk_address_updates[0]['ADDRESS_LINE1'])
        test_helper.assertEqual(
            collection_case['address']['addressLine2'],
            context.bulk_address_updates[0]['ADDRESS_LINE2'])
        test_helper.assertEqual(
            collection_case['address']['addressLine3'],
            context.bulk_address_updates[0]['ADDRESS_LINE3'])
        test_helper.assertEqual(collection_case['address']['abpCode'],
                                context.bulk_address_updates[0]['ABP_CODE'])
        test_helper.assertEqual(
            collection_case['address']['organisationName'],
            context.bulk_address_updates[0]['ORGANISATION_NAME'])
        test_helper.assertEqual(collection_case['address']['postcode'],
                                context.bulk_address_updates[0]['POSTCODE'])
        test_helper.assertEqual(collection_case['address']['townName'],
                                context.bulk_address_updates[0]['TOWN_NAME'])

        test_helper.assertFalse(
            collection_case['skeleton'],
            'Skeleton flag should be removed from updated case')

    context.bulk_address_updates_file.unlink()
    if Config.BULK_ADDRESS_UPDATE_BUCKET_NAME:
        clear_bucket(Config.BULK_ADDRESS_UPDATE_BUCKET_NAME)
def offline_receipt_for_an_unlinked_qid(context):
    _publish_offline_receipt(context, channel="QM", questionnaire_id=context.expected_questionnaire_id, unreceipt=True)
    test_helper.assertTrue(context.sent_to_gcp)
示例#20
0
def undelivered_unlinked_qm_published_to_gcp_pubsub(context):
    _publish_qm_undelivered_mail(context,
                                 questionnaire_id=context.requested_qid)
    test_helper.assertTrue(context.sent_to_gcp)
    test_helper.assertEqual('CENSUS', action_instruction['surveyName'])
    test_helper.assertEqual(case['address']['estabType'],
                            action_instruction['estabType'])
    test_helper.assertEquals(case['ceExpectedCapacity'],
                             int(action_instruction['ceExpectedCapacity']))
    test_helper.assertEquals(case['ceActualResponses'],
                             int(action_instruction['ceActualResponses']))
    test_helper.assertEquals(case['handDelivery'],
                             action_instruction['handDeliver'])
    test_helper.assertEquals(case['caseRef'], action_instruction['caseRef'])
    test_helper.assertEquals(len(action_instruction['caseRef']), 10)
    test_helper.assertEquals(case['address']['uprn'],
                             action_instruction['uprn'])
    test_helper.assertEquals(case['address']['estabUprn'],
                             action_instruction['estabUprn'])
    test_helper.assertTrue(luhn.verify(action_instruction['caseRef']))


def field_work_cancel_callback(ch, method, _properties, body, context):
    action_cancel = json.loads(body)

    if not action_cancel['actionInstruction'] == 'CANCEL':
        ch.basic_nack(delivery_tag=method.delivery_tag)
        test_helper.fail(
            f'Unexpected message on {Config.RABBITMQ_OUTBOUND_FIELD_QUEUE} case queue. '
            f'Got "{action_cancel["actionInstruction"]}", wanted "CANCEL"')

    context.addressType = action_cancel['addressType']
    context.fwmt_emitted_case_id = action_cancel['caseId']
    context.field_action_cancel_message = action_cancel
    ch.basic_ack(delivery_tag=method.delivery_tag)
def receipt_offline_msg_published_to_gcp_pubsub(context):
    context.first_case = context.case_created_events[0]['payload']['collectionCase']
    questionnaire_id = context.uac_created_events[0]['payload']['uac']['questionnaireId']
    _publish_offline_receipt(context, channel='PQRS', unreceipt=False, questionnaire_id=questionnaire_id)
    test_helper.assertTrue(context.sent_to_gcp)
def continuation_receipt_offline_msg_published_to_gcp_pubsub(context):
    _publish_offline_receipt(context, questionnaire_id=context.requested_qid)
    test_helper.assertTrue(context.sent_to_gcp)
def blank_questionnaire_msg_published_to_gcp_pubsubs(context):
    _publish_offline_receipt(context, channel="QM", questionnaire_id=context.qid_to_receipt, unreceipt=True)
    test_helper.assertTrue(context.sent_to_gcp)
def send_receipt(context):
    _publish_object_finalize(context, questionnaire_id=context.qid_to_receipt)
    test_helper.assertTrue(context.sent_to_gcp)
def offline_msg_published_to_gcp_pubsub_for_unlinked_qids(context):
    _publish_offline_receipt(context, channel='PQRS', unreceipt=False,
                             questionnaire_id=context.expected_questionnaire_id)
    test_helper.assertTrue(context.sent_to_gcp)
示例#27
0
def undelivered_ppo_published_to_gcp_pubsub(context):
    context.first_case = context.case_created_events[0]['payload'][
        'collectionCase']
    case_ref = context.first_case['caseRef']
    _publish_ppo_undelivered_mail(context, case_ref=case_ref)
    test_helper.assertTrue(context.sent_to_gcp)
示例#28
0
def check_census_case_fields(context):
    test_helper.assertTrue(context.case_details['caseRef'])
    test_helper.assertEquals(len(context.case_details['caseRef']), 10)
    test_helper.assertTrue(luhn.verify(context.case_details['caseRef']))

    test_helper.assertTrue(context.case_details['estabUprn'])
    test_helper.assertTrue(context.case_details['estabType'])
    test_helper.assertTrue(context.case_details['uprn'])
    test_helper.assertTrue(context.case_details['collectionExerciseId'])
    test_helper.assertTrue(context.case_details['createdDateTime'])
    test_helper.assertTrue(context.case_details['lastUpdated'])
    test_helper.assertTrue(context.case_details['addressLine1'])
    test_helper.assertTrue(context.case_details['addressLine2'])
    test_helper.assertTrue(context.case_details['addressLine3'])
    test_helper.assertTrue(context.case_details['townName'])
    test_helper.assertTrue(context.case_details['postcode'])
    test_helper.assertTrue(context.case_details['addressLevel'])
    test_helper.assertTrue(context.case_details['abpCode'])
    test_helper.assertTrue(context.case_details['region'])
    test_helper.assertTrue(context.case_details['latitude'])
    test_helper.assertTrue(context.case_details['longitude'])
    test_helper.assertTrue(context.case_details['oa'])
    test_helper.assertTrue(context.case_details['lsoa'])
    test_helper.assertTrue(context.case_details['msoa'])
    test_helper.assertTrue(context.case_details['lad'])
    test_helper.assertTrue(context.case_details['id'])
    test_helper.assertTrue(context.case_details['addressType'])
    test_helper.assertTrue(context.case_details['caseType'])
    test_helper.assertEqual(context.case_details['surveyType'], "CENSUS")
    test_helper.assertFalse(context.case_details['handDelivery'])