def test_report_one_job_as_failure(job_manager):
    job_manager.add_job(
        DocumentsJob(job_id=1,
                     page_offset=0,
                     start_date='03-01-2020',
                     end_date='04-01-2020'))
    app = create_app(job_manager, SpyDataRepository(), MockDatabase(True))
    app.config['TESTING'] = True
    client = app.test_client()
    assert job_manager.num_unassigned() == 1

    client.get('/get_job')
    assert job_manager.request_job_called
    assert job_manager.num_unassigned() == 0

    json_data = {
        'client_id': 100,
        'job_id': 0,
        'client_message': 'Regulations.gov API is not working.'
    }
    result = client.post('/report_failure',
                         data=json.dumps(json_data),
                         content_type='application/json')
    assert result.status_code == 200
    assert job_manager.num_unassigned() == 1
def test_return_result_success(job_manager, client):
    app = create_app(job_manager, SpyDataRepository(), MockDatabase(True))
    app.config['TESTING'] = True
    client = app.test_client()

    json_data = {
        'client_id':
        'client1',
        'job_id':
        'job1',
        'data': [{
            'folder_name': 'thisisafoldername',
            'file_name': 'thisisafilename',
            'data': {}
        }],
        'jobs': [
            {
                'job_type': 'documents',
                'job_id': 'thisiajobid',
                'page_offset': 'thisiapageoffset',
                'start_date': 'thisisastartdate',
                'end_date': 'thisisanenddate'
            },
        ]
    }
    result = client.post('/return_result',
                         data=json.dumps(json_data),
                         content_type='application/json')
    assert result.status_code == 200
    assert job_manager.add_job_called
    assert job_manager.num_unassigned() == 1
def test_store_single_data_item(job_manager):
    data_repository_spy = SpyDataRepository()
    app = create_app(job_manager, data_repository_spy, MockDatabase(True))
    app.config['TESTING'] = True
    client = app.test_client()

    json_data = {
        'client_id':
        '1',
        'job_id':
        '1',
        'data': [{
            'folder_name': 'foldername',
            'file_name': 'filename',
            'data': {}
        }],
        'jobs': []
    }

    client.post('/return_result',
                data=json.dumps(json_data),
                content_type='application/json')

    first_save = data_repository_spy.saved_items[0]

    assert first_save.directory_name == 'foldername'
    assert first_save.filename == 'filename'
    assert first_save.contents == {}
def test_none_job_return_when_no_job(job_manager):
    app = create_app(job_manager, SpyDataRepository(), MockDatabase(True))
    app.config['TESTING'] = True
    client = app.test_client()
    result = client.get('/get_job')
    assert job_manager.request_job_called
    job = json.loads(result.data)
    assert job['job_type'] == 'none'
def test_single_job_return(job_manager):
    job_manager.add_job(
        DocumentsJob(job_id=1,
                     page_offset=0,
                     start_date='03-01-2020',
                     end_date='04-01-2020'))
    app = create_app(job_manager, SpyDataRepository(), MockDatabase(True))
    app.config['TESTING'] = True
    client = app.test_client()
    result = client.get('/get_job')
    assert job_manager.request_job_called
    assert result.data == b'{"job_id": 1,' \
                          b' "page_offset": 0,' \
                          b' "start_date": "03-01-2020",' \
                          b' "end_date": "04-01-2020",' \
                          b' "job_type": "documents"}'
def client_fixture(job_manager):
    r_database = MockDatabase(True).fake_redis
    app = create_app(job_manager, SpyDataRepository(), r_database)
    app.config['TESTING'] = True
    return app.test_client()