tests.py 2.03 KB
Newer Older
1
from __future__ import annotations
Enrico Zini's avatar
Enrico Zini committed
2
3
4
5
6
7
8
from django.test import TestCase
from deploy.deployer import Deployer, Fail
from contextlib import contextmanager
import tempfile
import git
import os

9

Enrico Zini's avatar
Enrico Zini committed
10
11
12
13
14
15
class Env:
    def __init__(self, workdir):
        self.workdir = workdir
        self.queuedir = os.path.join(self.workdir, "queue")
        os.mkdir(self.queuedir)
        self.repodir = os.path.join(self.workdir, "repo")
16
        self.main_hexsha = None
Enrico Zini's avatar
Enrico Zini committed
17
18

    def create_repo(self):
19
        repo = git.Repo.init(self.repodir, bare=False, initial_branch='main')
Enrico Zini's avatar
Enrico Zini committed
20
        commit = repo.index.commit("Creating a branch")
21
        self.main_hexsha = commit.hexsha
Enrico Zini's avatar
Enrico Zini committed
22
        # Not available on current debian stable
23
        # repo.close()
Enrico Zini's avatar
Enrico Zini committed
24
25
26
27
28
29
30
31
32
33
34
35
36


class TestDeploy(TestCase):
    @contextmanager
    def env(self):
        with tempfile.TemporaryDirectory() as workdir:
            env = Env(workdir)
            env.create_repo()
            with self.settings(DEPLOY_QUEUE_DIR=env.queuedir):
                yield env

    def test_select_branch(self):
        with self.env() as env:
37
            with open(os.path.join(env.queuedir, env.main_hexsha + ".deploy"), "w"):
38
39
40
                pass
            with open(os.path.join(env.queuedir, "1111111111111111111111111111111111111111.deploy"), "w"):
                pass
41
            with self.settings(DEPLOY_BRANCH="main"):
Enrico Zini's avatar
Enrico Zini committed
42
43
                deployer = Deployer(root=env.repodir)
                deployer.select_branch(fetch=False)
44
45
                self.assertEqual(deployer.branch, "main")
                self.assertEqual(deployer.ref.commit.hexsha, env.main_hexsha)
Enrico Zini's avatar
Enrico Zini committed
46
47
48

    def test_select_branch_fail(self):
        with self.env() as env:
49
50
            with open(os.path.join(env.queuedir, "1111111111111111111111111111111111111111.deploy"), "w"):
                pass
51
            with self.settings(DEPLOY_BRANCH="main"):
Enrico Zini's avatar
Enrico Zini committed
52
53
54
55
                deployer = Deployer(root=env.repodir)
                with self.assertRaises(Fail) as e:
                    deployer.select_branch(fetch=False)
                self.assertIn("are queued for deploy", str(e.exception))