def test_create_add_more(any_added_issue, any_indexer): c1 = Changeset.objects.create(indexer=any_indexer, state=states.OPEN, change_type=CTYPES['issue_add']) any_added_issue = Issue.objects.get(pk=any_added_issue.pk) # With after=None, should insert the issue at the beginning. rev1 = IssueRevision(changeset=c1, series=any_added_issue.series) rev1.save() rev1.commit_to_display() # It's necessary to re-fetch (not just refresh) the various issues # to get the calculated sort codes loaded. original_issue = Issue.objects.get(pk=any_added_issue.pk) issue1 = Issue.objects.get(pk=rev1.issue.pk) assert issue1.sort_code < original_issue.sort_code c2 = Changeset.objects.create(indexer=any_indexer, state=states.OPEN, change_type=CTYPES['issue_add']) rev2 = IssueRevision(changeset=c2, series=any_added_issue.series, after=rev1.issue) rev2.save() rev2.commit_to_display() # Again, re-fetch all the things. original_issue = Issue.objects.get(pk=any_added_issue.pk) issue1 = Issue.objects.get(pk=rev1.issue.pk) issue2 = Issue.objects.get(pk=rev2.issue.pk) assert issue2.sort_code < original_issue.sort_code assert issue1.sort_code < issue2.sort_code
def test_noncomics_counts(any_added_series_rev, issue_add_values, any_adding_changeset, any_variant_adding_changeset, any_deleting_changeset): # This is written out in long form because while it could be broken # up into fixtures and separate cases, it is only this one specific # sequence of operations that needs any of this code right now. s_rev = any_added_series_rev s_rev.is_comics_publication = False s_rev.save() with mock.patch(UPDATE_ALL) as updater: s_rev.commit_to_display() updater.has_calls([ mock.call({}, language=None, country=None, negate=True), mock.call({'series': 1}, language=s_rev.series.language, country=s_rev.series.country), ]) assert updater.call_count == 2 series = Series.objects.get(pk=s_rev.series.pk) issue_add_values['series'] = series i_rev = IssueRevision(changeset=any_adding_changeset, **issue_add_values) i_rev.save() i_rev = IssueRevision.objects.get(pk=i_rev.pk) old_series_issue_count = i_rev.series.issue_count old_ind_pub_issue_count = i_rev.indicia_publisher.issue_count old_brand_issue_count = i_rev.brand.issue_count old_brand_group_counts = { group.pk: group.issue_count for group in i_rev.brand.group.all() } old_publisher_issue_count = i_rev.series.publisher.issue_count with mock.patch(UPDATE_ALL) as updater: i_rev.commit_to_display() # Changeset must be approved so we can re-edit this later. i_rev.changeset.state = states.APPROVED i_rev.changeset.save() updater.has_calls([ mock.call({}, language=None, country=None, negate=True), mock.call({ 'stories': 0, 'covers': 0 }, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 i_rev = IssueRevision.objects.get(pk=i_rev.pk) s = i_rev.issue.series # Non-comics issues do not affect the issue counts EXCEPT on the series. assert s.issue_count == old_series_issue_count + 1 assert s.publisher.issue_count == old_publisher_issue_count assert i_rev.issue.brand.issue_count == old_brand_issue_count assert { group.pk: group.issue_count for group in i_rev.issue.brand.group.all() } == old_brand_group_counts assert i_rev.issue.indicia_publisher.issue_count == old_ind_pub_issue_count # Now do it all again with a variant added to the new issue. v_rev = IssueRevision(changeset=any_variant_adding_changeset, number='100', variant_of=i_rev.issue, variant_name='alternate cover', series=i_rev.series, brand=i_rev.brand, indicia_publisher=i_rev.indicia_publisher) v_rev.save() v_rev = IssueRevision.objects.get(pk=v_rev.pk) old_series_issue_count = v_rev.series.issue_count old_ind_pub_issue_count = v_rev.indicia_publisher.issue_count old_brand_issue_count = v_rev.brand.issue_count old_brand_group_counts = { group.pk: group.issue_count for group in v_rev.brand.group.all() } old_publisher_issue_count = v_rev.series.publisher.issue_count with mock.patch(UPDATE_ALL) as updater: v_rev.commit_to_display() # Changeset must be approved so we can re-edit this later. v_rev.changeset.state = states.APPROVED v_rev.changeset.save() updater.has_calls([ mock.call({ 'stories': 0, 'covers': 0 }, language=None, country=None, negate=True), mock.call({ 'stories': 0, 'covers': 0 }, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 v_rev = IssueRevision.objects.get(pk=v_rev.pk) s = v_rev.issue.series # Non-comics variants do not affect the issue counts on anything. assert s.issue_count == old_series_issue_count assert s.publisher.issue_count == old_publisher_issue_count assert v_rev.issue.brand.issue_count == old_brand_issue_count assert { group.pk: group.issue_count for group in v_rev.issue.brand.group.all() } == old_brand_group_counts assert v_rev.issue.indicia_publisher.issue_count == old_ind_pub_issue_count # Now delete the variant, should still have the same counts. del_v_rev = IssueRevision.clone( changeset=any_deleting_changeset, data_object=Issue.objects.get(pk=v_rev.issue.pk)) del_v_rev.deleted = True del_v_rev.save() del_v_rev = IssueRevision.objects.get(pk=del_v_rev.pk) with mock.patch(UPDATE_ALL) as updater: del_v_rev.commit_to_display() del_v_rev = IssueRevision.objects.get(pk=del_v_rev.pk) updater.has_calls([ mock.call({ 'stories': 0, 'covers': 0 }, language=None, country=None, negate=True), mock.call({ 'stories': 0, 'covers': 0 }, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 s = Series.objects.get(pk=del_v_rev.series.pk) i = Issue.objects.get(pk=del_v_rev.issue.pk) assert s.issue_count == old_series_issue_count assert s.publisher.issue_count == old_publisher_issue_count assert i.brand.issue_count == old_brand_issue_count assert {group.pk: group.issue_count for group in i.brand.group.all()} == old_brand_group_counts assert i.indicia_publisher.issue_count == old_ind_pub_issue_count # Finally, delete the base issue, check for only series.issue_count deleting_variant_changeset = Changeset( state=states.OPEN, change_type=0, indexer=any_deleting_changeset.indexer) deleting_variant_changeset.save() del_i_rev = IssueRevision.clone( changeset=deleting_variant_changeset, data_object=Issue.objects.get(pk=i_rev.issue.pk)) del_i_rev.deleted = True del_i_rev.save() del_i_rev = IssueRevision.objects.get(pk=del_i_rev.pk) with mock.patch(UPDATE_ALL) as updater: del_i_rev.commit_to_display() del_i_rev = IssueRevision.objects.get(pk=del_v_rev.pk) updater.has_calls([ mock.call({ 'stories': 0, 'covers': 0 }, language=None, country=None, negate=True), mock.call({ 'stories': 0, 'covers': 0 }, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 s = Series.objects.get(pk=del_i_rev.series.pk) i = Issue.objects.get(pk=del_i_rev.issue.pk) # Series issue counts are adjusted even for non comics. assert s.issue_count == old_series_issue_count - 1 assert s.publisher.issue_count == old_publisher_issue_count assert i.brand.issue_count == old_brand_issue_count assert {group.pk: group.issue_count for group in i.brand.group.all()} == old_brand_group_counts assert i.indicia_publisher.issue_count == old_ind_pub_issue_count
def test_noncomics_counts(any_added_series_rev, issue_add_values, any_adding_changeset, any_variant_adding_changeset, any_deleting_changeset): # This is written out in long form because while it could be broken # up into fixtures and separate cases, it is only this one specific # sequence of operations that needs any of this code right now. s_rev = any_added_series_rev s_rev.is_comics_publication = False s_rev.save() with mock.patch(UPDATE_ALL) as updater: s_rev.commit_to_display() updater.has_calls([ mock.call({}, language=None, country=None, negate=True), mock.call({'series': 1}, language=s_rev.series.language, country=s_rev.series.country), ]) assert updater.call_count == 2 series = Series.objects.get(pk=s_rev.series.pk) issue_add_values['series'] = series i_rev = IssueRevision(changeset=any_adding_changeset, **issue_add_values) i_rev.save() i_rev = IssueRevision.objects.get(pk=i_rev.pk) old_series_issue_count = i_rev.series.issue_count old_ind_pub_issue_count = i_rev.indicia_publisher.issue_count old_brand_issue_count = i_rev.brand.issue_count old_brand_group_counts = {group.pk: group.issue_count for group in i_rev.brand.group.all()} old_publisher_issue_count = i_rev.series.publisher.issue_count with mock.patch(UPDATE_ALL) as updater: i_rev.commit_to_display() # Changeset must be approved so we can re-edit this later. i_rev.changeset.state = states.APPROVED i_rev.changeset.save() updater.has_calls([ mock.call({}, language=None, country=None, negate=True), mock.call({'stories': 0, 'covers': 0}, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 i_rev = IssueRevision.objects.get(pk=i_rev.pk) s = i_rev.issue.series # Non-comics issues do not affect the issue counts EXCEPT on the series. assert s.issue_count == old_series_issue_count + 1 assert s.publisher.issue_count == old_publisher_issue_count assert i_rev.issue.brand.issue_count == old_brand_issue_count assert { group.pk: group.issue_count for group in i_rev.issue.brand.group.all() } == old_brand_group_counts assert i_rev.issue.indicia_publisher.issue_count == old_ind_pub_issue_count # Now do it all again with a variant added to the new issue. v_rev = IssueRevision(changeset=any_variant_adding_changeset, number='100', variant_of=i_rev.issue, variant_name='alternate cover', series=i_rev.series, brand=i_rev.brand, indicia_publisher=i_rev.indicia_publisher) v_rev.save() v_rev = IssueRevision.objects.get(pk=v_rev.pk) old_series_issue_count = v_rev.series.issue_count old_ind_pub_issue_count = v_rev.indicia_publisher.issue_count old_brand_issue_count = v_rev.brand.issue_count old_brand_group_counts = {group.pk: group.issue_count for group in v_rev.brand.group.all()} old_publisher_issue_count = v_rev.series.publisher.issue_count with mock.patch(UPDATE_ALL) as updater: v_rev.commit_to_display() # Changeset must be approved so we can re-edit this later. v_rev.changeset.state = states.APPROVED v_rev.changeset.save() updater.has_calls([ mock.call({'stories': 0, 'covers': 0}, language=None, country=None, negate=True), mock.call({'stories': 0, 'covers': 0}, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 v_rev = IssueRevision.objects.get(pk=v_rev.pk) s = v_rev.issue.series # Non-comics variants do not affect the issue counts on anything. assert s.issue_count == old_series_issue_count assert s.publisher.issue_count == old_publisher_issue_count assert v_rev.issue.brand.issue_count == old_brand_issue_count assert { group.pk: group.issue_count for group in v_rev.issue.brand.group.all() } == old_brand_group_counts assert v_rev.issue.indicia_publisher.issue_count == old_ind_pub_issue_count # Now delete the variant, should still have the same counts. del_v_rev = IssueRevision.clone( changeset=any_deleting_changeset, data_object=Issue.objects.get(pk=v_rev.issue.pk)) del_v_rev.deleted = True del_v_rev.save() del_v_rev = IssueRevision.objects.get(pk=del_v_rev.pk) with mock.patch(UPDATE_ALL) as updater: del_v_rev.commit_to_display() del_v_rev = IssueRevision.objects.get(pk=del_v_rev.pk) updater.has_calls([ mock.call({'stories': 0, 'covers': 0}, language=None, country=None, negate=True), mock.call({'stories': 0, 'covers': 0}, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 s = Series.objects.get(pk=del_v_rev.series.pk) i = Issue.objects.get(pk=del_v_rev.issue.pk) assert s.issue_count == old_series_issue_count assert s.publisher.issue_count == old_publisher_issue_count assert i.brand.issue_count == old_brand_issue_count assert {group.pk: group.issue_count for group in i.brand.group.all()} == old_brand_group_counts assert i.indicia_publisher.issue_count == old_ind_pub_issue_count # Finally, delete the base issue, check for only series.issue_count deleting_variant_changeset = Changeset( state=states.OPEN, change_type=0, indexer=any_deleting_changeset.indexer) deleting_variant_changeset.save() del_i_rev = IssueRevision.clone( changeset=deleting_variant_changeset, data_object=Issue.objects.get(pk=i_rev.issue.pk)) del_i_rev.deleted = True del_i_rev.save() del_i_rev = IssueRevision.objects.get(pk=del_i_rev.pk) with mock.patch(UPDATE_ALL) as updater: del_i_rev.commit_to_display() del_i_rev = IssueRevision.objects.get(pk=del_v_rev.pk) updater.has_calls([ mock.call({'stories': 0, 'covers': 0}, language=None, country=None, negate=True), mock.call({'stories': 0, 'covers': 0}, language=i_rev.series.language, country=i_rev.series.country), ]) assert updater.call_count == 2 s = Series.objects.get(pk=del_i_rev.series.pk) i = Issue.objects.get(pk=del_i_rev.issue.pk) # Series issue counts are adjusted even for non comics. assert s.issue_count == old_series_issue_count - 1 assert s.publisher.issue_count == old_publisher_issue_count assert i.brand.issue_count == old_brand_issue_count assert {group.pk: group.issue_count for group in i.brand.group.all()} == old_brand_group_counts assert i.indicia_publisher.issue_count == old_ind_pub_issue_count