~launchpad-pqm/launchpad/devel

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
# Copyright 2010 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).

"""`TranslationTemplatesBuild` view tests."""

__metaclass__ = type

from datetime import datetime

from pytz import utc
from zope.component import getUtility
from zope.security.proxy import removeSecurityProxy

from lp.buildmaster.enums import BuildFarmJobType
from lp.buildmaster.interfaces.buildfarmjob import IBuildFarmJobSource
from lp.services.webapp.servers import LaunchpadTestRequest
from lp.testing import TestCaseWithFactory
from lp.testing.layers import DatabaseFunctionalLayer
from lp.translations.browser.translationtemplatesbuild import (
    TranslationTemplatesBuildView,
    )
from lp.translations.interfaces.translations import (
    TranslationsBranchImportMode,
    )
from lp.translations.interfaces.translationtemplatesbuild import (
    ITranslationTemplatesBuildSource,
    )


def now():
    """Now."""
    return datetime.now(utc)


class TestTranslationTemplatesBuild(TestCaseWithFactory):

    layer = DatabaseFunctionalLayer

    def _makeBuild(self, branch=None):
        """Create a `TranslationTemplatesBuild`."""
        if branch is None:
            branch = self.factory.makeBranch()
        job = getUtility(IBuildFarmJobSource).new(
            BuildFarmJobType.TRANSLATIONTEMPLATESBUILD)
        return getUtility(ITranslationTemplatesBuildSource).create(
            job, branch)

    def _makeView(self, build=None):
        """Create a view for testing."""
        if build is None:
            build = self._makeBuild()
        request = LaunchpadTestRequest()
        view = TranslationTemplatesBuildView(build, request)
        view.initialize()
        return view

    def _makeProductSeries(self, branch):
        """Create a `ProductSeries` that imports templates from `branch`."""
        productseries = self.factory.makeProductSeries()
        removeSecurityProxy(productseries).branch = branch
        removeSecurityProxy(productseries).translations_autoimport_mode = (
            TranslationsBranchImportMode.IMPORT_TEMPLATES)
        return productseries

    def test_getTargets_finds_target(self):
        productseries = self._makeProductSeries(self.factory.makeBranch())
        view = self._makeView(self._makeBuild(productseries.branch))
        self.assertContentEqual([productseries], view.getTargets())

    def test_renderDispatchTime(self):
        build = self._makeBuild()
        view = self._makeView(build)
        self.assertEqual("Not started yet.", view.renderDispatchTime())
        removeSecurityProxy(build.build_farm_job).date_started = now()
        self.assertIn("Started", view.renderDispatchTime())

    def test_renderFinishTime(self):
        """Finish time is shown once build has started."""
        build = self._makeBuild()
        view = self._makeView(build)
        self.assertEqual("", view.renderFinishTime())
        removeSecurityProxy(build.build_farm_job).date_started = now()
        self.assertEqual("Not finished yet.", view.renderFinishTime())
        removeSecurityProxy(build.build_farm_job).date_finished = now()
        self.assertIn("Finished", view.renderFinishTime())