summaryrefslogtreecommitdiffstats
path: root/python/tests/api_editgroups.py
blob: 722d8686de1a722e5cc4f3202974607e838390c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140

import json
import pytest
import datetime
from copy import copy

from fatcat_client import *
from fatcat_client.rest import ApiException
from fixtures import *


def test_editgroup_submit(api):
    # 1. check that edit group can be submitted/unsubmitted, and shows up in reviewable appropriately
    # 2. accepted edits don't show up as reviewable and can't be submitted

    c1 = CreatorEntity(display_name="test updates")
    eg = quick_eg(api)
    c1 = api.get_creator(api.create_creator(c1, editgroup_id=eg.editgroup_id).ident)

    eg2 = api.get_editgroup(eg.editgroup_id)
    assert not eg2.submitted
    assert not eg2.changelog_index

    reviewable = api.get_editgroups_reviewable(limit=100)
    assert eg.editgroup_id not in [v.editgroup_id for v in reviewable]
    wip = api.get_editor_editgroups(eg.editor_id, limit=100)
    assert eg.editgroup_id in [v.editgroup_id for v in wip]

    api.update_editgroup(eg.editgroup_id, eg2, submit=True)
    eg3 = api.get_editgroup(eg.editgroup_id)
    assert eg3.submitted
    reviewable = api.get_editgroups_reviewable(limit=100)
    assert eg.editgroup_id in [v.editgroup_id for v in reviewable]

    api.update_editgroup(eg.editgroup_id, eg2, submit=False)
    eg3 = api.get_editgroup(eg.editgroup_id)
    assert not eg3.submitted
    reviewable = api.get_editgroups_reviewable(limit=100)
    assert eg.editgroup_id not in [v.editgroup_id for v in reviewable]

    # put back in reviewable
    api.update_editgroup(eg.editgroup_id, eg2, submit=True)
    reviewable = api.get_editgroups_reviewable(limit=100)
    assert eg.editgroup_id in [v.editgroup_id for v in reviewable]

    # shouldn't be reviewable if accepted
    api.accept_editgroup(eg.editgroup_id)
    reviewable = api.get_editgroups_reviewable(limit=100)
    assert eg.editgroup_id not in [v.editgroup_id for v in reviewable]
    eg3 = api.get_editgroup(eg.editgroup_id)
    #print(eg3)
    assert eg3.submitted
    assert eg3.changelog_index

    with pytest.raises(fatcat_client.rest.ApiException):
        api.update_editgroup(eg.editgroup_id, eg3, submit=True)
    with pytest.raises(fatcat_client.rest.ApiException):
        eg3.description = "something"
        api.update_editgroup(eg.editgroup_id, eg3)


def test_editgroup_ordering(api):

    eg1 = quick_eg(api)
    eg2 = quick_eg(api)
    api.update_editgroup(
        eg1.editgroup_id,
        Editgroup(editgroup_id=eg1.editgroup_id, description="FAIL"),
        submit=True)
    api.update_editgroup(
        eg2.editgroup_id,
        Editgroup(editgroup_id=eg2.editgroup_id, description="FAIL"),
        submit=True)

    r1 = api.get_editgroups_reviewable()
    #print(r1)
    assert not r1[0].description
    assert not r1[1].description
    assert r1[0].submitted >= r1[1].submitted

    # should be no editgroups "in the future" (since now + 1sec)
    r1 = api.get_editgroups_reviewable(since=(datetime.datetime.utcnow() + datetime.timedelta(seconds=1)).isoformat()+"Z")
    assert not r1

    r1 = api.get_editgroups_reviewable(since=(datetime.datetime.utcnow() - datetime.timedelta(seconds=5)).isoformat()+"Z")
    assert r1[0].submitted <= r1[1].submitted


def test_editgroup_autoaccept(api):
    # autoaccept changes: editgroups required when, in what combination

    eg = quick_eg(api)
    c1 = CreatorEntity(display_name="test autoaccept")
    c2 = CreatorEntity(display_name="test another autoaccept")

    with pytest.raises(fatcat_client.rest.ApiException):
        edits = api.create_creator_batch([c1, c2])

    with pytest.raises(fatcat_client.rest.ApiException):
        edits = api.create_creator_batch([c1, c2], editgroup_id=eg.editgroup_id, autoaccept=True)

    edits1 = api.create_creator_batch([c1, c2], editgroup_id=eg.editgroup_id)
    edits2 = api.create_creator_batch([c1, c2], autoaccept=True)

    assert edits1[0].editgroup_id == eg.editgroup_id
    assert edits1[0].editgroup_id != edits2[1].editgroup_id
    eg1 = api.get_editgroup(edits1[0].editgroup_id)
    eg2 = api.get_editgroup(edits2[0].editgroup_id)

    assert not eg1.changelog_index
    assert eg2.changelog_index
    #print(edits1)
    #print(eg1.edits.creators)
    assert eg1.edits.creators[0].ident in [t.ident for t in edits1]
    assert eg2.edits.creators[0].ident in [t.ident for t in edits2]


def test_batch_params(api):

    eg = quick_eg(api)
    c1 = CreatorEntity(display_name="test autoaccept")
    c2 = CreatorEntity(display_name="test another autoaccept")

    with pytest.raises(fatcat_client.rest.ApiException):
        edits = api.create_creator_batch([c1, c2])

    desc = "test description"
    extra = dict(a=75, q="thing")
    edits = api.create_creator_batch([c1, c2], autoaccept=True, description=desc, extra=json.dumps(extra))
    eg = api.get_editgroup(edits[0].editgroup_id)

    assert eg.description == desc
    assert eg.extra == extra

    # currently must manually json dumps() extra field
    with pytest.raises(fatcat_client.rest.ApiException):
        api.create_creator_batch([c1, c2], autoaccept=True, description=desc, extra=extra)

    with pytest.raises(fatcat_client.rest.ApiException):
        api.create_creator_batch([c1, c2], autoaccept=True, description=desc, extra="{")