Code Duplication    Length = 124-125 lines in 3 locations

backend/tracim_backend/tests/functional/test_user.py 2 locations

@@ 253-377 (lines=125) @@
250
        assert 'code' in res.json.keys()
251
        assert res.json_body['code'] == error.WORKSPACE_NOT_FOUND
252
253
    def test_api__get_recently_active_content__ok__200__user_itself(self):
254
255
        # init DB
256
        dbsession = get_tm_session(self.session_factory, transaction.manager)
257
        admin = dbsession.query(models.User) \
258
            .filter(models.User.email == '[email protected]') \
259
            .one()
260
        workspace_api = WorkspaceApi(
261
            current_user=admin,
262
            session=dbsession,
263
            config=self.app_config
264
265
        )
266
        workspace = WorkspaceApi(
267
            current_user=admin,
268
            session=dbsession,
269
            config=self.app_config,
270
        ).create_workspace(
271
            'test workspace',
272
            save_now=True
273
        )
274
        workspace2 = WorkspaceApi(
275
            current_user=admin,
276
            session=dbsession,
277
            config=self.app_config,
278
        ).create_workspace(
279
            'test workspace2',
280
            save_now=True
281
        )
282
283
        uapi = UserApi(
284
            current_user=admin,
285
            session=dbsession,
286
            config=self.app_config,
287
        )
288
        gapi = GroupApi(
289
            current_user=admin,
290
            session=dbsession,
291
            config=self.app_config,
292
        )
293
        groups = [gapi.get_one_with_name('users')]
294
        test_user = uapi.create_user(
295
            email='[email protected]',
296
            password='pass',
297
            name='bob',
298
            groups=groups,
299
            timezone='Europe/Paris',
300
            lang='fr',
301
            do_save=True,
302
            do_notify=False,
303
        )
304
        rapi = RoleApi(
305
            current_user=admin,
306
            session=dbsession,
307
            config=self.app_config,
308
        )
309
        rapi.create_one(test_user, workspace, UserRoleInWorkspace.READER, False)
310
        api = ContentApi(
311
            current_user=admin,
312
            session=dbsession,
313
            config=self.app_config,
314
        )
315
        main_folder_workspace2 = api.create(content_type_list.Folder.slug, workspace2, None, 'Hepla', '', True)  # nopep8
316
        main_folder = api.create(content_type_list.Folder.slug, workspace, None, 'this is randomized folder', '', True)  # nopep8
317
        # creation order test
318
        firstly_created = api.create(content_type_list.Page.slug, workspace, main_folder, 'creation_order_test', '', True)  # nopep8
319
        secondly_created = api.create(content_type_list.Page.slug, workspace, main_folder, 'another creation_order_test', '', True)  # nopep8
320
        # update order test
321
        firstly_created_but_recently_updated = api.create(content_type_list.Page.slug, workspace, main_folder, 'update_order_test', '', True)  # nopep8
322
        secondly_created_but_not_updated = api.create(content_type_list.Page.slug, workspace, main_folder, 'another update_order_test', '', True)  # nopep8
323
        with new_revision(
324
            session=dbsession,
325
            tm=transaction.manager,
326
            content=firstly_created_but_recently_updated,
327
        ):
328
            firstly_created_but_recently_updated.description = 'Just an update'
329
        api.save(firstly_created_but_recently_updated)
330
        # comment change order
331
        firstly_created_but_recently_commented = api.create(content_type_list.Page.slug, workspace, main_folder, 'this is randomized label content', '', True)  # nopep8
332
        secondly_created_but_not_commented = api.create(content_type_list.Page.slug, workspace, main_folder, 'this is another randomized label content', '', True)  # nopep8
333
        comments = api.create_comment(workspace, firstly_created_but_recently_commented, 'juste a super comment', True)  # nopep8
334
        content_workspace_2 = api.create(content_type_list.Page.slug, workspace2, main_folder_workspace2, 'content_workspace_2', '', True)  # nopep8
335
        dbsession.flush()
336
        transaction.commit()
337
338
        self.testapp.authorization = (
339
            'Basic',
340
            (
341
                '[email protected]',
342
                'pass'
343
            )
344
        )
345
        res = self.testapp.get('/api/v2/users/{user_id}/workspaces/{workspace_id}/contents/recently_active'.format(   # nopep8
346
            user_id=test_user.user_id,
347
            workspace_id=workspace.workspace_id
348
        ), status=200)
349
        res = res.json_body
350
        assert len(res) == 7
351
        for elem in res:
352
            assert isinstance(elem['content_id'], int)
353
            assert isinstance(elem['content_type'], str)
354
            assert elem['content_type'] != 'comments'
355
            assert isinstance(elem['is_archived'], bool)
356
            assert isinstance(elem['is_deleted'], bool)
357
            assert isinstance(elem['label'], str)
358
            assert isinstance(elem['parent_id'], int) or elem['parent_id'] is None
359
            assert isinstance(elem['show_in_ui'], bool)
360
            assert isinstance(elem['slug'], str)
361
            assert isinstance(elem['status'], str)
362
            assert isinstance(elem['sub_content_types'], list)
363
            for sub_content_type in elem['sub_content_types']:
364
                assert isinstance(sub_content_type, str)
365
            assert isinstance(elem['workspace_id'], int)
366
        # comment is newest than page2
367
        assert res[0]['content_id'] == firstly_created_but_recently_commented.content_id
368
        assert res[1]['content_id'] == secondly_created_but_not_commented.content_id
369
        # last updated content is newer than other one despite creation
370
        # of the other is more recent
371
        assert res[2]['content_id'] == firstly_created_but_recently_updated.content_id
372
        assert res[3]['content_id'] == secondly_created_but_not_updated.content_id
373
        # creation order is inverted here as last created is last active
374
        assert res[4]['content_id'] == secondly_created.content_id
375
        assert res[5]['content_id'] == firstly_created.content_id
376
        # folder subcontent modification does not change folder order
377
        assert res[6]['content_id'] == main_folder.content_id
378
379
    def test_api__get_recently_active_content__err__403__other_user(self):
380
@@ 34-157 (lines=124) @@
31
    """
32
    fixtures = [BaseFixture]
33
34
    def test_api__get_recently_active_content__ok__200__admin(self):
35
36
        # init DB
37
        dbsession = get_tm_session(self.session_factory, transaction.manager)
38
        admin = dbsession.query(models.User) \
39
            .filter(models.User.email == '[email protected]') \
40
            .one()
41
        workspace_api = WorkspaceApi(
42
            current_user=admin,
43
            session=dbsession,
44
            config=self.app_config
45
46
        )
47
        workspace = WorkspaceApi(
48
            current_user=admin,
49
            session=dbsession,
50
            config=self.app_config,
51
        ).create_workspace(
52
            'test workspace',
53
            save_now=True
54
        )
55
        workspace2 = WorkspaceApi(
56
            current_user=admin,
57
            session=dbsession,
58
            config=self.app_config,
59
        ).create_workspace(
60
            'test workspace2',
61
            save_now=True
62
        )
63
        uapi = UserApi(
64
            current_user=admin,
65
            session=dbsession,
66
            config=self.app_config,
67
        )
68
        gapi = GroupApi(
69
            current_user=admin,
70
            session=dbsession,
71
            config=self.app_config,
72
        )
73
        groups = [gapi.get_one_with_name('users')]
74
        test_user = uapi.create_user(
75
            email='[email protected]',
76
            password='pass',
77
            name='bob',
78
            groups=groups,
79
            timezone='Europe/Paris',
80
            lang='fr',
81
            do_save=True,
82
            do_notify=False,
83
        )
84
        rapi = RoleApi(
85
            current_user=admin,
86
            session=dbsession,
87
            config=self.app_config,
88
        )
89
        rapi.create_one(test_user, workspace, UserRoleInWorkspace.READER, False)
90
        api = ContentApi(
91
            current_user=admin,
92
            session=dbsession,
93
            config=self.app_config,
94
        )
95
        main_folder_workspace2 = api.create(content_type_list.Folder.slug, workspace2, None, 'Hepla', '', True)  # nopep8
96
        main_folder = api.create(content_type_list.Folder.slug, workspace, None, 'this is randomized folder', '', True)  # nopep8
97
        # creation order test
98
        firstly_created = api.create(content_type_list.Page.slug, workspace, main_folder, 'creation_order_test', '', True)  # nopep8
99
        secondly_created = api.create(content_type_list.Page.slug, workspace, main_folder, 'another creation_order_test', '', True)  # nopep8
100
        # update order test
101
        firstly_created_but_recently_updated = api.create(content_type_list.Page.slug, workspace, main_folder, 'update_order_test', '', True)  # nopep8
102
        secondly_created_but_not_updated = api.create(content_type_list.Page.slug, workspace, main_folder, 'another update_order_test', '', True)  # nopep8
103
        with new_revision(
104
            session=dbsession,
105
            tm=transaction.manager,
106
            content=firstly_created_but_recently_updated,
107
        ):
108
            firstly_created_but_recently_updated.description = 'Just an update'
109
        api.save(firstly_created_but_recently_updated)
110
        # comment change order
111
        firstly_created_but_recently_commented = api.create(content_type_list.Page.slug, workspace, main_folder, 'this is randomized label content', '', True)  # nopep8
112
        secondly_created_but_not_commented = api.create(content_type_list.Page.slug, workspace, main_folder, 'this is another randomized label content', '', True)  # nopep8
113
        comments = api.create_comment(workspace, firstly_created_but_recently_commented, 'juste a super comment', True)  # nopep8
114
        content_workspace_2 = api.create(content_type_list.Page.slug, workspace2, main_folder_workspace2, 'content_workspace_2', '', True)  # nopep8
115
        dbsession.flush()
116
        transaction.commit()
117
118
        self.testapp.authorization = (
119
            'Basic',
120
            (
121
                '[email protected]',
122
                '[email protected]'
123
            )
124
        )
125
        res = self.testapp.get('/api/v2/users/{user_id}/workspaces/{workspace_id}/contents/recently_active'.format(   # nopep8
126
            user_id=test_user.user_id,
127
            workspace_id=workspace.workspace_id
128
        ), status=200)
129
        res = res.json_body
130
        assert len(res) == 7
131
        for elem in res:
132
            assert isinstance(elem['content_id'], int)
133
            assert isinstance(elem['content_type'], str)
134
            assert elem['content_type'] != 'comments'
135
            assert isinstance(elem['is_archived'], bool)
136
            assert isinstance(elem['is_deleted'], bool)
137
            assert isinstance(elem['label'], str)
138
            assert isinstance(elem['parent_id'], int) or elem['parent_id'] is None
139
            assert isinstance(elem['show_in_ui'], bool)
140
            assert isinstance(elem['slug'], str)
141
            assert isinstance(elem['status'], str)
142
            assert isinstance(elem['sub_content_types'], list)
143
            for sub_content_type in elem['sub_content_types']:
144
                assert isinstance(sub_content_type, str)
145
            assert isinstance(elem['workspace_id'], int)
146
        # comment is newest than page2
147
        assert res[0]['content_id'] == firstly_created_but_recently_commented.content_id
148
        assert res[1]['content_id'] == secondly_created_but_not_commented.content_id
149
        # last updated content is newer than other one despite creation
150
        # of the other is more recent
151
        assert res[2]['content_id'] == firstly_created_but_recently_updated.content_id
152
        assert res[3]['content_id'] == secondly_created_but_not_updated.content_id
153
        # creation order is inverted here as last created is last active
154
        assert res[4]['content_id'] == secondly_created.content_id
155
        assert res[5]['content_id'] == firstly_created.content_id
156
        # folder subcontent modification does not change folder order
157
        assert res[6]['content_id'] == main_folder.content_id
158
159
    def test_api__get_recently_active_content__err__400__no_access_to_workspace(self):
160

backend/tracim_backend/tests/functional/test_account.py 1 location

@@ 35-158 (lines=124) @@
32
    """
33
    fixtures = [BaseFixture]
34
35
    def test_api__get_recently_active_content__ok__200__nominal(self):
36
37
        # init DB
38
        dbsession = get_tm_session(self.session_factory, transaction.manager)
39
        admin = dbsession.query(models.User) \
40
            .filter(models.User.email == '[email protected]') \
41
            .one()
42
        workspace_api = WorkspaceApi(
43
            current_user=admin,
44
            session=dbsession,
45
            config=self.app_config
46
47
        )
48
        workspace = WorkspaceApi(
49
            current_user=admin,
50
            session=dbsession,
51
            config=self.app_config,
52
        ).create_workspace(
53
            'test workspace',
54
            save_now=True
55
        )
56
        workspace2 = WorkspaceApi(
57
            current_user=admin,
58
            session=dbsession,
59
            config=self.app_config,
60
        ).create_workspace(
61
            'test workspace2',
62
            save_now=True
63
        )
64
65
        uapi = UserApi(
66
            current_user=admin,
67
            session=dbsession,
68
            config=self.app_config,
69
        )
70
        gapi = GroupApi(
71
            current_user=admin,
72
            session=dbsession,
73
            config=self.app_config,
74
        )
75
        groups = [gapi.get_one_with_name('users')]
76
        test_user = uapi.create_user(
77
            email='[email protected]',
78
            password='pass',
79
            name='bob',
80
            groups=groups,
81
            timezone='Europe/Paris',
82
            lang='fr',
83
            do_save=True,
84
            do_notify=False,
85
        )
86
        rapi = RoleApi(
87
            current_user=admin,
88
            session=dbsession,
89
            config=self.app_config,
90
        )
91
        rapi.create_one(test_user, workspace, UserRoleInWorkspace.READER, False)
92
        api = ContentApi(
93
            current_user=admin,
94
            session=dbsession,
95
            config=self.app_config,
96
        )
97
        main_folder_workspace2 = api.create(content_type_list.Folder.slug, workspace2, None, 'Hepla', '', True)  # nopep8
98
        main_folder = api.create(content_type_list.Folder.slug, workspace, None, 'this is randomized folder', '', True)  # nopep8
99
        # creation order test
100
        firstly_created = api.create(content_type_list.Page.slug, workspace, main_folder, 'creation_order_test', '', True)  # nopep8
101
        secondly_created = api.create(content_type_list.Page.slug, workspace, main_folder, 'another creation_order_test', '', True)  # nopep8
102
        # update order test
103
        firstly_created_but_recently_updated = api.create(content_type_list.Page.slug, workspace, main_folder, 'update_order_test', '', True)  # nopep8
104
        secondly_created_but_not_updated = api.create(content_type_list.Page.slug, workspace, main_folder, 'another update_order_test', '', True)  # nopep8
105
        with new_revision(
106
            session=dbsession,
107
            tm=transaction.manager,
108
            content=firstly_created_but_recently_updated,
109
        ):
110
            firstly_created_but_recently_updated.description = 'Just an update'
111
        api.save(firstly_created_but_recently_updated)
112
        # comment change order
113
        firstly_created_but_recently_commented = api.create(content_type_list.Page.slug, workspace, main_folder, 'this is randomized label content', '', True)  # nopep8
114
        secondly_created_but_not_commented = api.create(content_type_list.Page.slug, workspace, main_folder, 'this is another randomized label content', '', True)  # nopep8
115
        comments = api.create_comment(workspace, firstly_created_but_recently_commented, 'juste a super comment', True)  # nopep8
116
        content_workspace_2 = api.create(content_type_list.Page.slug, workspace2, main_folder_workspace2, 'content_workspace_2', '', True)  # nopep8
117
        dbsession.flush()
118
        transaction.commit()
119
120
        self.testapp.authorization = (
121
            'Basic',
122
            (
123
                '[email protected]',
124
                'pass'
125
            )
126
        )
127
        res = self.testapp.get('/api/v2/users/me/workspaces/{workspace_id}/contents/recently_active'.format(   # nopep8
128
            workspace_id=workspace.workspace_id
129
        ), status=200)
130
        res = res.json_body
131
        assert len(res) == 7
132
        for elem in res:
133
            assert isinstance(elem['content_id'], int)
134
            assert isinstance(elem['content_type'], str)
135
            assert elem['content_type'] != 'comments'
136
            assert isinstance(elem['is_archived'], bool)
137
            assert isinstance(elem['is_deleted'], bool)
138
            assert isinstance(elem['label'], str)
139
            assert isinstance(elem['parent_id'], int) or elem['parent_id'] is None
140
            assert isinstance(elem['show_in_ui'], bool)
141
            assert isinstance(elem['slug'], str)
142
            assert isinstance(elem['status'], str)
143
            assert isinstance(elem['sub_content_types'], list)
144
            for sub_content_type in elem['sub_content_types']:
145
                assert isinstance(sub_content_type, str)
146
            assert isinstance(elem['workspace_id'], int)
147
        # comment is newest than page2
148
        assert res[0]['content_id'] == firstly_created_but_recently_commented.content_id
149
        assert res[1]['content_id'] == secondly_created_but_not_commented.content_id
150
        # last updated content is newer than other one despite creation
151
        # of the other is more recent
152
        assert res[2]['content_id'] == firstly_created_but_recently_updated.content_id
153
        assert res[3]['content_id'] == secondly_created_but_not_updated.content_id
154
        # creation order is inverted here as last created is last active
155
        assert res[4]['content_id'] == secondly_created.content_id
156
        assert res[5]['content_id'] == firstly_created.content_id
157
        # folder subcontent modification does not change folder order
158
        assert res[6]['content_id'] == main_folder.content_id
159
160
    def test_api__get_recently_active_content__ok__200__limit_2_multiple(self):
161
        # TODO - G.M - 2018-07-20 - Better fix for this test, do not use sleep()