aboutsummaryrefslogtreecommitdiff
blob: 58d08fb0915f8b0d7ab002e16ae08111375d3606 (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
import shutil
import unittest

from os import path, makedirs
from tempfile import mkdtemp

from pomu.package import Package
from pomu.repo.init import init_plain_repo
from pomu.repo.repo import Repository, pomu_active_repo
from pomu.source import dispatcher
from pomu.util.result import Result

@dispatcher.source
class DummySource():
    @dispatcher.handler(priority=3)
    def parse(uri):
        if uri.startswith('/'):
            return Result.Ok(uri[1:])
        return Result.Err()

    @classmethod
    def fetch_package(cls, uri):
        return Package('test', cls.path, backend=cls, category='test')


class DispatcherTests(unittest.TestCase):
    def setUp(self):
        pomu_active_repo._drop()
        self.source_path = mkdtemp()
        makedirs(path.join(self.source_path, 'test'))
        with open(path.join(self.source_path, 'test', 'test.ebuild'), 'w+') as f:
            f.write('# Copytight 1999-2017\nAll Rights Reserved\nEAPI="0"\n')
        DummySource.path = self.source_path

    def testDispatch(self):
        self.assertEqual(dispatcher.get_package_source('/test').unwrap(), DummySource)
        self.assertTrue(dispatcher.get_package_source('test').is_err())
        self.assertTrue(dispatcher.get_package('sys-apps/portage').is_ok())

    def testFetch(self):
        pkg = dispatcher.get_package('/test').unwrap()
        self.assertEqual(pkg.files, [('test', 'test.ebuild')])

    def tearDown(self):
        shutil.rmtree(self.source_path)


class InstallTests(unittest.TestCase):
    def setUp(self):
        pomu_active_repo._drop()
        self.source_path = mkdtemp()
        makedirs(path.join(self.source_path, 'test'))
        with open(path.join(self.source_path, 'test', 'test.ebuild'), 'w+') as f:
            f.write('# Copytight 1999-2017\nAll Rights Reserved\nEAPI="0"\n')
        DummySource.path = self.source_path

        self.repo_dir = mkdtemp()
        shutil.rmtree(self.repo_dir)
        init_plain_repo(True, self.repo_dir).expect()
        self.repo = Repository(self.repo_dir)

    def tearDown(self):
        shutil.rmtree(self.repo_dir)

    def testPkgCreate(self):
        pkg = Package('test', self.source_path, category='test', files=['test/test.ebuild'])
        self.assertEqual(pkg.files, [('test', 'test.ebuild')])

    def testPortagePkg(self):
        pkg = dispatcher.get_package('sys-apps/portage').expect()
        self.repo.merge(pkg).expect()

# TODO: convert to LocalEbuildFile backend
#    def testPkgMerge(self):
#        pkg = Package('test', self.source_path, category='test')
#        self.repo.merge(pkg).expect()
#
#    def testPkgUnmerge(self):
#        pkg = Package('test', self.source_path, category='test')
#        self.repo.merge(pkg).expect()
#        with self.subTest(i=0):
#            self.repo.unmerge(pkg).expect()
#        with self.subTest(i=1):
#            self.repo.remove_package('test').expect()
#        with self.subTest(i=2):
#            self.repo.remove_package('tset').expect_err()