init
[GitLab/stricted-build/lineage_builder.git] / test.py
1 import os
2 import unittest
3 import flask_migrate
4 import flask_testing
5
6 from ui import config
7 from ui.app import app
8 from ui.models import Build, Runner, db
9
10 class UsesApp(flask_testing.TestCase):
11 def create_app(self):
12 return app
13
14 class UsesModels(UsesApp):
15 def setUp(self):
16 flask_migrate.upgrade(revision="head")
17
18 def tearDown(self):
19 flask_migrate.downgrade(revision="base")
20
21 class TestModels(UsesModels):
22
23 def test_build(self):
24 build = Build(build_id=1)
25 db.session.add(build)
26 db.session.commit()
27
28 assert build in db.session
29
30 def test_get_or_create_build_by_id(self):
31 build = Build(build_id=1)
32 db.session.add(build)
33 db.session.commit()
34
35 assert Build.get_or_create_by_id(1).build_id == 1
36 assert Build.get_or_create_by_id(2).build_id == 2
37
38 def test_runner(self):
39 runner = Runner(runner_id="foobar")
40 db.session.add(runner)
41 db.session.commit()
42
43 assert runner in db.session
44
45 def test_get_or_create_runner_by_id(self):
46 runner = Runner(runner_id="foobar", runner_name="foobar")
47 db.session.add(runner)
48 db.session.commit()
49
50 assert Runner.get_or_create_by_id('foobar').runner_name == "foobar"
51 assert Runner.get_or_create_by_id("foobaz").runner_name == None
52
53 def test_runner_build_rel(self):
54 runner = Runner(runner_id="foobar", runner_name="foobar")
55 build = Build(build_id=1, build_runner=runner)
56 db.session.add(runner)
57 db.session.add(build)
58 db.session.commit()
59
60 assert build.build_runner == runner
61 assert build in runner.builds
62
63 class TestWebhooks(UsesModels):
64
65 def test_invalid_token(self):
66 with open("tests/pipeline_webhook.json", "r") as f:
67 response = self.client.post("/webhook", headers={'X-Gitlab-Event': 'Pipeline Hook', 'X-Gitlab-Token': 'invalidsecret'}, data=f.read(), content_type='application/json')
68 assert response.status_code == 403
69
70 def test_pipeline_webhook(self):
71 with open("tests/pipeline_webhook.json", "r") as f:
72 response = self.client.post("/webhook", headers={'X-Gitlab-Event': 'Pipeline Hook', 'X-Gitlab-Token': 'secret'}, data=f.read(), content_type='application/json')
73 assert response.status_code == 200
74 build = Build.query.filter_by(build_id=1).first()
75 assert build.build_id == 1
76 assert build.build_runner_id == "foobar"
77
78 if __name__ == "__main__":
79 unittest.main()