def test_format_protoclaims_ref_adds_column_set_default(self): claim_1 = pywikibot.Claim(self.repo, 'P123') claim_1.setTarget('1') ref_1 = Reference(claim_1) claim_2 = pywikibot.Claim(self.repo, 'P123') claim_2.setTarget('2') ref_2 = Reference(claim_2) itis_1 = Statement('foo') itis_2 = Statement('bar').add_reference(ref_1) self.preview_item.ref = ref_2 self.preview_item.protoclaims = {'P123': [itis_1, itis_2]} expected = ("{| class='wikitable'\n" "|-\n" "! Property\n" "! Value\n" "! Qualifiers\n" "! References\n" '|-\n' '| wd_template_1 \n' '| formatted_itis_1 \n' '| \n' '| italics_default reference \n' '|-\n' '| wd_template_1 \n' '| formatted_itis_2 \n' '| \n' '| \nformatted_reference_1 \n' "|}") self.assertEqual(self.preview_item.format_protoclaims(), expected) self.mock_wd_template.assert_called_once_with('P123') self.mock_format_itis.assert_has_calls( [mock.call(itis_1), mock.call(itis_2)]) self.mock_format_qual.assert_not_called() self.mock_format_ref.assert_called_once_with(ref_1)
def test_statement_add_bad_reference_error(self): s = Statement('foo') with self.assertRaises(pwbError) as cm: s.add_reference('foo') self.assertEqual( str(cm.exception), 'add_reference was called with something other ' 'than a Reference object: foo')
def test_format_protoclaims_multple_different_prop(self): itis_1 = Statement('foo') itis_2 = Statement('bar') protoclaims = {'P123': itis_1, 'P321': itis_2} self.preview_item.protoclaims = OrderedDict( sorted(protoclaims.items(), key=lambda t: int(t[0][1:]))) expected = ("{| class='wikitable'\n" "|-\n" "! Property\n" "! Value\n" "! Qualifiers\n" '|-\n' '| wd_template_1 \n' '| formatted_itis_1 \n' '| \n' '|-\n' '| wd_template_2 \n' '| formatted_itis_2 \n' '| \n' "|}") self.assertEqual(self.preview_item.format_protoclaims(), expected) self.mock_wd_template.assert_has_calls( [mock.call('P123'), mock.call('P321')], any_order=True) self.mock_format_itis.assert_has_calls( [mock.call(itis_1), mock.call(itis_2)], any_order=True) self.mock_format_qual.assert_not_called() self.mock_format_ref.assert_not_called()
def test_add_new_claim_embedded_ref_used(self): statement = Statement(self.value) statement.add_reference(self.mock_ref_2) self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, None) self.mock_add_reference.assert_called_once() self.assertEqual(self.mock_add_reference.call_args[0][2], self.mock_ref_2)
def test_statement_add_second_reference_error(self): s = Statement('foo').add_reference(self.ref) with self.assertRaises(pwbError) as cm: s.add_reference(self.ref) self.assertEqual( str(cm.exception), 'add_reference was called when the statement already had ' 'a reference assigned to it.')
def test_statement_add_second_reference_error(self): s = Statement('foo').add_reference(self.ref) with self.assertRaises(pwbError) as cm: s.add_reference(self.ref) self.assertEqual( str(cm.exception), 'add_reference was called when the statement already had ' 'a reference assigned to it.')
def test_statement_add_bad_reference_error(self): s = Statement('foo') with self.assertRaises(pwbError) as cm: s.add_reference('foo') self.assertEqual( str(cm.exception), 'add_reference was called with something other ' 'than a Reference object: foo')
def test_add_new_claim_new_property_with_quals(self): statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_called_once() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once()
def test_statement_inequality(self): s = Statement('novalue') s_special = Statement('novalue', special=True) s_force = Statement('novalue') s_force.force = True self.assertNotEquals(s, s_special) self.assertNotEquals(s, s_force) self.assertNotEquals(s_force, s_special)
def test_add_new_claim_new_property_with_quals(self): statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_called_once() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once()
def test_statement_inequality(self): s = Statement('novalue') s_special = Statement('novalue', special=True) s_force = Statement('novalue') s_force.force = True self.assertNotEquals(s, s_special) self.assertNotEquals(s, s_force) self.assertNotEquals(s_force, s_special)
def test_statement_init_special(self): self.assertTrue(Statement('somevalue', special=True).special) self.assertTrue(Statement('novalue', special=True).special) with self.assertRaises(pwbError) as cm: Statement('foo', special=True) self.assertEqual( str(cm.exception), 'You tried to create a special statement with a non-allowed ' 'snakvalue: foo')
def test_add_new_claim_provided_ref_overrides_embedded_ref(self): statement = Statement(self.value) statement.add_reference(self.mock_ref_2) self.wd_stuff.add_new_claim( self.prop, statement, self.wd_page, self.mock_ref_1) self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][2], self.mock_ref_1)
def test_statement_qualifier(self): s = Statement('foo') s.add_qualifier(self.q_1) self.assertEquals(s.quals, [self.q_1]) self.assertEquals(s._quals, set([self.q_1])) self.assertEquals(s, s) s.add_qualifier(self.q_2) self.assertEquals(s._quals, set([self.q_1, self.q_2])) self.assertEquals(s, s)
def test_add_new_claim_old_property_old_value_with_different_quals(self): self.prop = 'P174' self.value = 'A string entry with a qualifier' statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_called_once() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once()
def test_add_new_claim_old_property_old_value_with_different_quals(self): self.prop = 'P174' self.value = 'A string entry with a qualifier' statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_called_once() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once()
def test_statement_equality(self): s = Statement('foo') s_same = Statement('foo') s_different = Statement('bar') self.assertEqual(s, s) self.assertEqual(s, s_same) self.assertNotEquals(s, s_different) # Comparison with other classes always gives false, weird but expected self.assertFalse(s == 'foo') self.assertFalse(s != 'foo')
def test_statement_equality_qualifier_order(self): s_1 = Statement('foo') s_2 = Statement('foo') s_3 = Statement('foo') s_1.add_qualifier(self.q_1).add_qualifier(self.q_2) s_2.add_qualifier(self.q_2).add_qualifier(self.q_1) s_3.add_qualifier(self.q_1) self.assertEquals(s_1, s_2) self.assertNotEquals(s_1, s_3)
def test_add_new_claim_old_property_old_value_with_same_quals(self): self.prop = 'P174' self.value = 'A string entry with many qualifiers' statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) expected_claim = 'Q27399$b48a2630-4fbb-932d-4f01-eefcf1e73f59' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_add_new_claim_old_property_old_value_without_quals(self): self.prop = 'P174' self.value = 'A string' statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) expected_claim = 'Q27399$3f62d521-4efe-e8de-8f2d-0d8a10e024cf' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_add_new_claim_edit_correct_qualified_claim(self): self.prop = 'P664' self.value = 'Duplicate_string' statement = Statement(self.value) statement.add_qualifier( Qualifier('P174', 'qualifier')) expected_claim = 'Q27399$a9b83de1-49d7-d033-939d-f430a232ffd0' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.mock_add_claim.mock_add_qualifier() self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_add_new_claim_old_property_old_value_without_quals(self): self.prop = 'P174' self.value = 'A string' statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) expected_claim = 'Q27399$3f62d521-4efe-e8de-8f2d-0d8a10e024cf' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_add_new_claim_edit_correct_qualified_claim_with_ref(self): self.prop = 'P664' self.value = 'Duplicate_string_with_ref' statement = Statement(self.value) statement.add_qualifier(Qualifier('P174', 'qualifier')) expected_claim = 'Q27399$e63f47a3-45ea-e2fc-1363-8f6062205084' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.mock_add_claim.mock_add_qualifier() self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_add_new_claim_old_property_old_value_with_same_quals(self): self.prop = 'P174' self.value = 'A string entry with many qualifiers' statement = Statement(self.value) statement.add_qualifier(self.qual_1).add_qualifier(self.qual_2) expected_claim = 'Q27399$b48a2630-4fbb-932d-4f01-eefcf1e73f59' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.assertEqual(self.mock_add_qualifier.call_count, 2) self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_add_new_claim_edit_correct_qualified_claim(self): self.prop = 'P664' self.value = 'Duplicate_string' statement = Statement(self.value) statement.add_qualifier(Qualifier('P174', 'qualifier')) expected_claim = 'Q27399$a9b83de1-49d7-d033-939d-f430a232ffd0' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.mock_add_claim.mock_add_qualifier() self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_add_new_claim_edit_correct_qualified_claim_with_ref(self): self.prop = 'P664' self.value = 'Duplicate_string_with_ref' statement = Statement(self.value) statement.add_qualifier( Qualifier('P174', 'qualifier')) expected_claim = 'Q27399$e63f47a3-45ea-e2fc-1363-8f6062205084' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.mock_add_claim.mock_add_qualifier() self.mock_add_reference.assert_called_once() self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_format_itis_statement_item(self): item = pywikibot.ItemPage(self.repo, 'Q123') itis = Statement(item) expected = 'wd_template_1' self.assertEqual(PreviewItem.format_itis(itis), expected) self.mock_wd_template.assert_called_once_with(item) self.mock_format_timestring.assert_not_called()
def test_statement_init(self): s = Statement('foo') self.assertFalse(s.force) self.assertFalse(s.special) self.assertEqual(s.quals, []) self.assertEqual(s.itis, 'foo') self.assertEqual(s.ref, None)
def test_add_new_claim_raise_error_on_bad_ref(self): statement = Statement(self.value) with self.assertRaises(pywikibot.Error) as e: self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, 'Not a ref') self.assertEqual( str(e.exception), 'The provided reference was not a ' 'Reference object. Crashing')
def test_add_new_claim_new_property(self): statement = Statement(self.value) self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_called_once() self.mock_add_qualifier.assert_not_called() self.mock_add_reference.assert_called_once()
def test_statement_none_qualifier(self): s = Statement('foo') s.add_qualifier(None) self.assertEqual(s.quals, []) s.add_qualifier(None, force=True) s.force = False
def test_add_new_claim_call_special_has_claim(self): value = 'somevalue' statement = Statement(value, special=True) function = 'wikidatastuff.wikidata_stuff.WikidataStuff.has_special_claim' with mock.patch(function, autospec=True) as mock_has_special_claim: self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) mock_has_special_claim.assert_called_once_with( self.wd_stuff, self.prop, value, self.wd_page)
def test_statement_repr(self): s = Statement('foo') self.assertEqual( repr(s), 'WD.Statement(' 'itis:foo, quals:[], ref:None, special:False, force:False)') s.add_qualifier(self.q_1) self.assertEqual( repr(s), 'WD.Statement(' 'itis:foo, quals:[WD.Qualifier(P123, foo)], ref:None, ' 'special:False, force:False)') s.add_reference(self.ref) self.assertEqual( repr(s), 'WD.Statement(' 'itis:foo, quals:[WD.Qualifier(P123, foo)], ' 'ref:WD.Reference(test: [WD.Claim(P55: foo)], no_test: []), ' 'special:False, force:False)')
def test_add_new_claim_warning_on_duplicate_matching_claim(self): self.prop = 'P84' self.value = pywikibot.ItemPage(self.repo, 'Q505') statement = Statement(self.value) self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_warning.assert_called_once_with( 'Problem adding P84 claim to [[wikidata:test:-1]]: ' 'Multiple identical claims') self.mock_add_claim.assert_not_called() self.mock_add_qualifier.assert_not_called() self.mock_add_reference.assert_not_called()
def test_statement_none_qualifier(self): s = Statement('foo') s.add_qualifier(None) self.assertEquals(s.quals, []) s.add_qualifier(None, force=True) s.force = False
def test_format_protoclaims_multple_same_prop(self): itis_1 = Statement('foo') itis_2 = Statement('bar') self.preview_item.protoclaims = {'P123': [itis_1, itis_2]} expected = ("{| class='wikitable'\n" "|-\n" "! Property\n" "! Value\n" "! Qualifiers\n" '|-\n' '| wd_template_1 \n' '| formatted_itis_1 \n' '| \n' '|-\n' '| wd_template_1 \n' '| formatted_itis_2 \n' '| \n' "|}") self.assertEqual(self.preview_item.format_protoclaims(), expected) self.mock_wd_template.assert_called_once_with('P123') self.mock_format_itis.assert_has_calls( [mock.call(itis_1), mock.call(itis_2)]) self.mock_format_qual.assert_not_called() self.mock_format_ref.assert_not_called()
def test_statement_qualifier(self): s = Statement('foo') s.add_qualifier(self.q_1) self.assertEqual(s.quals, [self.q_1]) self.assertEqual(s._quals, set([self.q_1])) self.assertEqual(s, s) s.add_qualifier(self.q_2) self.assertEqual(s._quals, set([self.q_1, self.q_2])) self.assertEqual(s, s)
def test_add_new_claim_old_property_old_value(self): self.prop = 'P174' self.value = 'A string' statement = Statement(self.value) expected_claim = 'Q27399$3f62d521-4efe-e8de-8f2d-0d8a10e024cf' self.wd_stuff.add_new_claim(self.prop, statement, self.wd_page, self.ref) self.mock_add_claim.assert_not_called() self.mock_add_qualifier.assert_not_called() self.mock_add_reference.assert_called_once() # ensure the right claim was sourced self.assertEqual( self.mock_add_reference.call_args[0][1].toJSON()['id'], expected_claim)
def test_format_protoclaims_single(self): itis = Statement('dummy') self.preview_item.protoclaims = {'P123': itis} expected = ("{| class='wikitable'\n" "|-\n" "! Property\n" "! Value\n" "! Qualifiers\n" '|-\n' '| wd_template_1 \n' '| formatted_itis_1 \n' '| \n' "|}") self.assertEqual(self.preview_item.format_protoclaims(), expected) self.mock_wd_template.assert_called_once_with('P123') self.mock_format_itis.assert_called_once_with(itis) self.mock_format_qual.assert_not_called() self.mock_format_ref.assert_not_called()
def test_statement_repr(self): s = Statement('foo') self.assertEqual( repr(s), 'WD.Statement(' 'itis:foo, quals:[], ref:None, special:False, force:False)') s.add_qualifier(self.q_1) self.assertEqual( repr(s), 'WD.Statement(' 'itis:foo, quals:[WD.Qualifier(P123, foo)], ref:None, ' 'special:False, force:False)') s.add_reference(self.ref) self.assertEqual( repr(s), 'WD.Statement(' 'itis:foo, quals:[WD.Qualifier(P123, foo)], ' 'ref:WD.Reference(test: [WD.Claim(P55: foo)], no_test: []), ' 'special:False, force:False)')
def test_format_protoclaims_single_with_multiple_qual(self): itis = Statement('dummy') qual_1 = Qualifier('P321', 'qual_dummy') qual_2 = Qualifier('P213', 'qual_dummy') itis._quals.add(qual_1) itis._quals.add(qual_2) self.preview_item.protoclaims = {'P123': itis} expected = ("{| class='wikitable'\n" "|-\n" "! Property\n" "! Value\n" "! Qualifiers\n" '|-\n' '| wd_template_1 \n' '| formatted_itis_1 \n' '| * formatted_qual_1 \n' '* formatted_qual_2 \n' "|}") self.assertEqual(self.preview_item.format_protoclaims(), expected) self.mock_wd_template.assert_called_once_with('P123') self.mock_format_itis.assert_called_once_with(itis) self.mock_format_qual.assert_has_calls( [mock.call(qual_1), mock.call(qual_2)], any_order=True) self.mock_format_ref.assert_not_called()
def test_statement_qualifier_chaining(self): s = Statement('foo') s.add_qualifier(self.q_1).add_qualifier(self.q_2) self.assertEquals(s._quals, set([self.q_1, self.q_2]))
def test_statement_add_reference(self): s = Statement('foo') s.add_reference(self.ref) self.assertEquals(s.ref, self.ref)
def test_statement_qualifier_duplicates(self): s = Statement('foo') s.add_qualifier(self.q_1) s.add_qualifier(self.q_1) self.assertEquals(s.quals, [self.q_1])
def test_statement_equality_qualifier_order(self): s_1 = Statement('foo') s_2 = Statement('foo') s_3 = Statement('foo') s_1.add_qualifier(self.q_1).add_qualifier(self.q_2) s_2.add_qualifier(self.q_2).add_qualifier(self.q_1) s_3.add_qualifier(self.q_1) self.assertEqual(s_1, s_2) self.assertNotEquals(s_1, s_3)
def test_format_itis_statement_detect_special(self): itis = Statement('novalue', special=True) expected = 'wd_template_1' self.assertEqual(PreviewItem.format_itis(itis), expected) self.mock_wd_template.assert_called_once_with('novalue', special=True) self.mock_format_timestring.assert_not_called()
def test_format_itis_statement_other(self): itis = Statement('dummy') expected = 'dummy' self.assertEqual(PreviewItem.format_itis(itis), expected) self.mock_wd_template.assert_not_called() self.mock_format_timestring.assert_not_called()