aboutsummaryrefslogtreecommitdiff
blob: 0a9087430a4aec40896435793541c1aad2100f3f (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
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
import random
from string import letters
from datetime import datetime
from collections import defaultdict

from django.contrib.auth.models import User
from django.db import IntegrityError

import factory

from djeuscan.models import Herd, Maintainer, Package, Version, EuscanResult, \
    Category, Overlay


class UserFactory(factory.Factory):
    FACTORY_FOR = User

    username = factory.Sequence(lambda n: 'user' + n)


def random_string(length=None):
    if length is None:
        length = random.randint(1, 30)
    return "".join([random.choice(letters) for _ in range(length)])


class HerdFactory(factory.Factory):
    FACTORY_FOR = Herd

    herd = factory.LazyAttribute(lambda a: random_string())
    email = factory.LazyAttribute(lambda a: "%s@example.com" % a.herd)


class MaintainerFactory(factory.Factory):
    FACTORY_FOR = Maintainer

    name = factory.LazyAttribute(lambda a: random_string())
    email = factory.LazyAttribute(lambda a: "%s@example.com" % a.name)


class CategoryFactory(factory.Factory):
    FACTORY_FOR = Category

    name = factory.LazyAttribute(lambda a: random_string())


class OverlayFactory(factory.Factory):
    FACTORY_FOR = Overlay

    name = factory.LazyAttribute(lambda a: random_string())


class PackageFactory(factory.Factory):
    FACTORY_FOR = Package

    category = factory.LazyAttribute(
        lambda a: "%s-%s" % (random_string(), random_string())
    )
    name = factory.LazyAttribute(lambda a: random_string())
    description = "This is a test package"
    homepage = "http://testpackage.com"

    @classmethod
    def _prepare(cls, create, **kwargs):
        package = super(PackageFactory, cls)._prepare(create, **kwargs)
        category = kwargs.pop('category', None)
        if create:
            CategoryFactory.create(name=category)
        else:
            CategoryFactory.build(name=category)
        return package


class VersionFactory(factory.Factory):
    FACTORY_FOR = Version

    package = factory.LazyAttribute(lambda a: PackageFactory())
    slot = "1"
    revision = "1"
    version = "0.1"
    packaged = True
    overlay = "gentoo"
    urls = "http://packageurl.com"

    @classmethod
    def _prepare(cls, create, **kwargs):
        version = super(VersionFactory, cls)._prepare(create, **kwargs)
        overlay = kwargs.pop('overlay', None)
        try:
            if create:
                OverlayFactory.create(name=overlay)
            else:
                OverlayFactory.build(name=overlay)
        except IntegrityError:
            pass
        return version


class EuscanResultFactory(factory.Factory):
    FACTORY_FOR = EuscanResult

    package = factory.LazyAttribute(lambda a: PackageFactory())
    datetime = datetime.now()
    result = "this is the result"


def setup_maintainers():
    maintainers = [MaintainerFactory.create() for _ in range(10)]
    packages = []
    for i in range(0, 10, 2):
        p = PackageFactory.create()
        p.maintainers.add(maintainers[i])
        p.maintainers.add(maintainers[i + 1])
        packages.append(p)
    return maintainers, packages


def setup_categories():
    packages = [PackageFactory.create() for _ in range(10)]
    categories = [p.category for p in packages]
    return categories, packages


def setup_herds():
    herds = [HerdFactory.create() for _ in range(10)]
    packages = []

    for i in range(0, 10, 2):
        p = PackageFactory.create()
        p.herds.add(herds[i])
        p.herds.add(herds[i + 1])
        packages.append(p)
    return herds, packages


def setup_overlays():
    overlays = [random_string() for _ in range(3)]
    packages = defaultdict(list)

    for _ in range(3):
        package = PackageFactory.create()
        for overlay in overlays:
            VersionFactory.create(package=package,
                                  overlay=overlay)
            packages[overlay].append(package)

    return overlays, packages