def test_ensure_dict_field_existing(): builder = JobBuilder() builder.record['existing_dict'] = {'some_dict': 'some_value'} builder._ensure_dict_field('existing_dict') assert builder.record['existing_dict'] == {'some_dict': 'some_value'}
def test_add_contact(): expected = [ { 'name': 'name', 'email': 'email', 'curated_relation': True, 'record': {'$ref': 'http://nothing'} }, { 'name': 'name2', 'email': 'email2' }, { 'name': 'name3', }, { 'email': 'email3' } ] builder = JobBuilder() builder.add_contact( name='name', email='email', curated_relation=True, record='http://nothing' ) builder.add_contact( name='name2', email='email2' ) builder.add_contact(name='name3') builder.add_contact(email='email3') assert builder.record['contact_details'] == expected
def test_ensure_field_existing_field(): builder = JobBuilder() assert 'status' in builder.record builder._ensure_field('status', 'other_status') assert builder.record['status'] == 'pending'
def test_add_rank(): expected = ['Rank1', 'Rank2'] builder = JobBuilder() builder.add_rank('Rank1') builder.add_rank('Rank2') assert builder.record['ranks'] == expected
def test_ensure_list_field_missing(): builder = JobBuilder() assert 'list_field' not in builder.record builder._ensure_list_field('list_field') assert 'list_field' in builder.record assert builder.record['list_field'] == []
def test_ensure_field_no_field(): builder = JobBuilder() assert 'test_field' not in builder.record builder._ensure_field('test_field', default_value='test_value') assert 'test_field' in builder.record assert builder.record['test_field'] == 'test_value'
def test_add_region(): expected = ['Region1', 'Region2'] builder = JobBuilder() builder.add_region('Region1') builder.add_region('Region2') assert builder.record['regions'] == expected
def test_sanitization_of_description(): expected = '<div>Some text <em>emphasized</em> linking to <a href="http://example.com">'\ 'http://example.com</a></div>' description = '<div>Some <span>text</span> <em class="shiny">emphasized</em> linking to '\ 'http://example.com</div>' builder = JobBuilder() builder.set_description(description) assert builder.record['description'] == expected
def test_append_to_field_duplicated_simple_data(): builder = JobBuilder() builder._append_to('test_field', 'first_element') builder._append_to('test_field', 'second_element') builder._append_to('test_field', 'first_element') builder._append_to('test_field', 'second_element') assert builder.record['test_field'] == ['first_element', 'second_element']
def test_ensure_dict_field_missing(): builder = JobBuilder() builder.record['existing_dict'] = {'some_dict': 'some_value'} assert 'dict_field' not in builder.record builder._ensure_dict_field('dict_field') assert 'dict_field' in builder.record assert builder.record['dict_field'] == {}
def test_add_private_note_without_source(): expected = { '_collections': ['Jobs'], 'status': 'pending', '_private_notes': [{'value': 'Note'}] } builder = JobBuilder() builder.add_private_note("Note", "") assert builder.record == expected
def test_sourced_dict_no_source(): builder = JobBuilder() expected = { 'value': 'foo' } result = builder._sourced_dict(None, value='foo') assert result == expected
def test_sourced_dict_global_source(): builder = JobBuilder(source='global') expected = { 'source': 'global', 'value': 'foo' } result = builder._sourced_dict(None, value='foo') assert result == expected
def prepare_new_record(self, data): if "$schema" not in data: data["$schema"] = url_for( "invenio_jsonschemas.get_schema", schema_path="records/jobs.json", _external=True, ) if not is_superuser_or_cataloger_logged_in(): data["status"] = "pending" builder = JobBuilder(record=data) if "acquisition_source" not in builder.record: acquisition_source = self.get_acquisition_source() builder.add_acquisition_source(**acquisition_source) return builder
def prepare_update_record(self, data, record): # This contains all fields which can be removed from record (they are optional) # if new value sent from the form is None, or empty in any other way # (after de-serialization if it's missing from input data) # this fields will be removed from record additional_fields = [ "external_job_identifier", "accelerator_experiments", "urls", "contact_details", "reference_letters", ] if not is_superuser_or_cataloger_logged_in(): old_status = record.get("status", "pending") new_status = data.get("status", old_status) if ( new_status != old_status and new_status not in self.user_allowed_status_changes[old_status] ): raise RESTDataError( f"Only curator can change status from '{old_status}' to '{new_status}'." ) record_data = dict(record) for key in additional_fields: if key not in data and key in record_data: del record_data[key] record_data.update(data) builder = JobBuilder(record=record_data) return builder
def test_add_reference_emails(): expected = {'emails': ['*****@*****.**', '*****@*****.**']} builder = JobBuilder() builder.add_reference_email('*****@*****.**') builder.add_reference_email('*****@*****.**') builder.add_reference_email('') assert builder.record['reference_letters'] == expected
def test_no_data(): expected = { '_collections': ['Jobs'], 'status': 'pending' } builder = JobBuilder() assert builder.record == expected
def test_add_reference_both(): expected = { 'emails': ['*****@*****.**', '*****@*****.**'], 'urls': [ {'value': 'https://jakas_strona.pl'}, {'value': 'http://xyz.uk', 'description': 'Some description'} ] } builder = JobBuilder() builder.add_reference_email('*****@*****.**') builder.add_reference_email('*****@*****.**') builder.add_reference_url("https://jakas_strona.pl") builder.add_reference_url('http://xyz.uk', 'Some description') assert builder.record['reference_letters'] == expected
def test_data_in_init(): expected = { '_collections': ['Jobs'], 'status': 'pending', 'some_key': 'some_value', 'some_key_with_list': ['some', 'list'], } builder = JobBuilder(expected) assert builder.record == expected
def test_add_arxiv_category(): expected = { '_collections': ['Jobs'], 'status': 'pending', 'arxiv_categories': ['cat1', 'cat2'] } builder = JobBuilder() builder.add_arxiv_category('cat1') builder.add_arxiv_category('cat2') builder.add_arxiv_category('other') builder.add_arxiv_category(''.join(list('other'))) assert builder.record == expected
def test_add_accelerator_experiment(): expected = { '_collections': ['Jobs'], 'status': 'pending', 'accelerator_experiments': [{ 'accelerator': 'accelerator', 'curated_relation': False, 'experiment': 'test1', 'institution': 'test2', 'legacy_name': 'test3', 'record': {'$ref': 'http://something'} }] } builder = JobBuilder() builder.add_accelerator_experiment( 'accelerator', False, 'test1', 'test2', 'test3', 'http://something' ) assert builder.record == expected
def test_process_reference_contact_list(): contacts = [ "*****@*****.**", "http://some-url.com/other/?url=1&part=2", "*****@*****.**" ] builder = JobBuilder() builder.add_reference_contacts(contacts) expected_data = { 'emails': [ '*****@*****.**', '*****@*****.**' ], 'urls': [ {'value': 'http://some-url.com/other/?url=1&part=2'} ] } assert builder.record['reference_letters'] == expected_data
def test_add_acquisition_source(): expected = { '_collections': ['Jobs'], 'status': 'pending', 'acquisition_source': { 'source': 'source', 'submission_number': '12345', 'datetime': '1999-02-01', 'email': '*****@*****.**', 'method': 'method', 'orcid': 'orcid', 'internal_uid': 'uuid' } } expected2 = { '_collections': ['Jobs'], 'status': 'pending', 'acquisition_source': {'submission_number': 'None', 'email': '*****@*****.**'} } builder = JobBuilder() builder.add_acquisition_source( '1999-02-01', '*****@*****.**', 'uuid', 'method', 'orcid', 'source', 12345 ) assert builder.record == expected builder.add_acquisition_source(email='*****@*****.**') assert builder.record == expected2
def test_add_external_system_identifiers(): expected = [ {'schema': 'schema1', 'value': 'value1'}, {'schema': 'schema2', 'value': 'value2'} ] builder = JobBuilder() builder.add_external_system_identifiers('value1', 'schema1') builder.add_external_system_identifiers(schema='schema2', value='value2') with pytest.raises(TypeError): builder.add_external_system_identifiers('aaaaa') assert builder.record['external_system_identifiers'] == expected
def test_reference_urls(): expected = { 'urls': [ {'value': 'http://some_url.ch'}, {'value': 'http://other.url.com', 'description': 'url description'} ] } builder = JobBuilder() builder.add_reference_url('http://some_url.ch') builder.add_reference_url('http://other.url.com', "url description") builder.add_reference_url('') assert builder.record['reference_letters'] == expected
def test_add_url(): expected = [ {'value': 'http://url.com'}, {'value': 'https://url2.ch', 'description': 'Description for this url'} ] builder = JobBuilder() builder.add_url('http://url.com') builder.add_url('https://url2.ch', 'Description for this url') with pytest.raises(TypeError): builder.add_url(description="some description") assert builder.record['urls'] == expected
def test_ensure_field_separate(): builder = JobBuilder() obj = {'field_one': 'value'} builder._ensure_field('test_field', default_value='test_value', obj=obj) builder._ensure_field('field_one', 'wrong_value', obj=obj) assert 'test_field' in obj assert obj['test_field'] == 'test_value' assert obj['field_one'] == 'value'
def test_set_title(): expected1 = 'TITLE1' expected2 = 'TITLE2' builder = JobBuilder() builder.set_title(expected1) assert builder.record['position'] == expected1 builder.set_title(expected2) assert builder.record['position'] == expected2
def test_set_status(): expected1 = 'pending' expected2 = 'closed' builder = JobBuilder() builder.set_status(expected1) assert builder.record['status'] == expected1 builder.set_status(expected2) assert builder.record['status'] == expected2
def test_set_deadline(): expected1 = "Description" expected2 = "Other Description" builder = JobBuilder() builder.set_description(expected1) assert builder.record['description'] == expected1 builder.set_description(expected2) assert builder.record['description'] == expected2