-
Notifications
You must be signed in to change notification settings - Fork 2
/
tests.py
executable file
·149 lines (124 loc) · 5.07 KB
/
tests.py
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
141
142
143
144
145
146
147
148
149
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
import sys
import unittest
import lxml.html
from pymongo import read_preferences
from neobug.local_settings import *
class TestSettings:
TESTING = True
MONGODB_SETTINGS = {
'host': DB_HOSTNAME,
'DB': DB_TEST_NAME,
'read_preference': read_preferences.ReadPreference.PRIMARY
}
sys.modules['neobug.test.config'] = TestSettings
from neobug import neobug
from neobug.models import User, Project, Issue
class NeobugTestCase(unittest.TestCase):
def setUp(self):
self.app = neobug.test_client()
@classmethod
def tearDownClass(self):
user = User.objects(username='login')
user.delete()
project = Project.objects.get(name='New project')
project.delete()
issue = Issue.objects.get(title='New issue')
issue.delete()
issue = Issue.objects.get(title='Test issue')
issue.comments = []
issue.save()
def test_register(self):
csrf_token = get_csrf_token(self.app, 'register')
rv = register(self.app, 'login', 'test@mail.com', 'proverka', csrf_token)
assert rv.data.find(b'login') != -1
assert rv.data.find(b'Logout') != -1
def test_login_logout(self):
rv = self.login('test', 'proverka')
assert rv.data.find(b'Logout(test)') != -1
rv = self.logout()
assert rv.data.find(b'Login') != -1
assert rv.data.find(b'Register') != -1
def test_add_project(self):
self.login('test', 'proverka')
csrf_token = get_csrf_token(self.app, 'projects/new')
name = 'New project'
description = 'This project created for test only.'
rv = add_project(self.app, name, description, csrf_token)
assert rv.data.find(bytes(name.encode('utf-8'))) != -1
assert rv.data.find(bytes(description.encode('utf-8'))) != -1
def test_add_issue(self):
self.login('test', 'proverka')
project = Project.objects.get(name='Test project')
project_num = project.number
project_id = project.id
csrf_token = get_csrf_token(self.app, 'projects/'+str(project_num))
title = 'New issue'
body = 'Test issue (not issue actually, huh?)'
rv = add_issue(self.app, project_num, title, body, csrf_token, project_id)
assert rv.data.find(bytes(title.encode('utf-8'))) != -1
assert rv.data.find(bytes(body.encode('utf-8'))) != -1
def test_add_comment(self):
self.login('test', 'proverka')
issue = Issue.objects.get(title='Test issue')
issue_id = issue.number
csrf_token = get_csrf_token(self.app, 'projects/issues/'+str(issue_id))
body = 'Test comment'
rv = self.add_comment(issue_id, body, csrf_token)
assert rv.data.find(bytes(body.encode('utf-8'))) != -1
def login(self, username, password):
return self.app.post('/login',
data=dict(username=username, password=password),
follow_redirects=True,
headers={'Referer': '/'})
def logout(self):
return self.app.get('/logout',
follow_redirects=True,
headers={'Referer': '/'})
def add_comment(self, issue_id, body, csrf_token):
return self.app.post('/projects/issues/'+str(issue_id), data=dict(
body=body,
csrf_token=csrf_token
), follow_redirects=True)
def register(app, username, email, password, csrf_token):
return app.post('/register', data=dict(
username=username,
email=email,
password=password,
repeat=password,
csrf_token=csrf_token
), follow_redirects=True)
def add_project(app, name, description, csrf_token):
return app.post('/projects/new', data=dict(
name=name,
description=description,
csrf_token=csrf_token
), follow_redirects=True)
def add_issue(app, project_num, title, body, csrf_token, project_id):
return app.post('/projects/'+str(project_num), data=dict(
project_id=project_id,
status='New',
category='Bug',
title=title,
body=body,
csrf_token=csrf_token
), follow_redirects=True)
def get_csrf_token(app, token_for):
rv = app.get('/' + token_for)
html = lxml.html.document_fromstring(rv.data)
return html.get_element_by_id('csrf_token').value
if __name__ == '__main__':
if len(User.objects(username='test')) == 0:
"""We need to add test user only for first test run"""
app = neobug.test_client()
token = get_csrf_token(app, 'register')
register(app, 'test', 'test@mail.com', 'proverka', token)
token = get_csrf_token(app, 'projects/new')
add_project(app, 'Test project', 'Test project description', token)
project = Project.objects(name='Test project')[0]
project_num = project.number
project_id = project.id
token = get_csrf_token(app, 'projects/' + str(project_num))
add_issue(app, project_num, 'Test issue', 'Test issue body', token, project_id)
unittest.main()