Skip to content

Commit

Permalink
test: resue fake project fixture
Browse files Browse the repository at this point in the history
  • Loading branch information
syu-w committed Feb 20, 2024
1 parent ede2fbb commit 2ae71d1
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 54 deletions.
26 changes: 8 additions & 18 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,10 @@

import os
import pathlib
import shutil
from importlib import metadata
from typing import TYPE_CHECKING, Any
from typing import Any

import craft_application
import craft_parts
import keyring
import pytest
import xdg.BaseDirectory
Expand All @@ -31,8 +29,7 @@
from craft_providers import bases
from craft_store.auth import MemoryKeyring

if TYPE_CHECKING: # pragma: no cover
from collections.abc import Iterator
import snapcraft.models


@pytest.fixture(autouse=True)
Expand Down Expand Up @@ -128,22 +125,25 @@ def app_metadata(features) -> craft_application.AppMetadata:


@pytest.fixture()
def fake_project() -> models.Project:
def fake_project(extra_project_params) -> snapcraft.models.Project:
arch = util.get_host_architecture()
return models.Project(
parts = extra_project_params.pop("parts", {"my-part": {"plugin": "nil"}})
return snapcraft.models.Project(
name="full-project", # pyright: ignore[reportArgumentType]
title="A fully-defined project", # pyright: ignore[reportArgumentType]
base="core24",
build_base="devel",
version="1.0.0.post64+git12345678", # pyright: ignore[reportArgumentType]
contact="author@project.org",
issues="https://github.com/canonical/snapcraft/issues",
source_code="https://github.com/canonical/snapcraft", # pyright: ignore[reportArgumentType]
summary="A fully-defined snapcraft project.", # pyright: ignore[reportArgumentType]
description="A fully-defined snapcraft project. (description)",
license="GPLv3",
parts={"my-part": {"plugin": "nil"}},
parts=parts,
platforms={"foo": Platform(build_on=arch, build_for=arch)},
package_repositories=None,
**extra_project_params,
)


Expand All @@ -153,16 +153,6 @@ def fake_build_plan() -> list[models.BuildInfo]:
return [models.BuildInfo("foo", arch, arch, bases.BaseName("ubuntu", "22.04"))]


@pytest.fixture()
def enable_overlay() -> Iterator[craft_parts.Features]:
"""Enable the overlay feature in craft_parts for the relevant test."""
if not os.getenv("CI") and not shutil.which("fuse-overlayfs"):
pytest.skip("fuse-overlayfs not installed, skipping overlay tests.")
craft_parts.Features.reset()
yield craft_parts.Features(enable_overlay=True)
craft_parts.Features.reset()


@pytest.fixture()
def lifecycle_service(
app_metadata, fake_project, fake_services, tmp_path
Expand Down
32 changes: 7 additions & 25 deletions tests/unit/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,52 +384,34 @@ def extra_project_params():


@pytest.fixture()
def default_project(extra_project_params):
from craft_application.models import SummaryStr, VersionStr

from snapcraft.models.project import Project

parts = extra_project_params.pop("parts", {})

return Project(
name="default",
version=VersionStr("1.0"),
summary=SummaryStr("default project"),
description="default project",
base="core24",
build_base="devel",
parts=parts,
license="MIT",
**extra_project_params,
)


@pytest.fixture()
def default_factory(default_project):
def default_factory(fake_project):
from snapcraft.application import APP_METADATA
from snapcraft.services import SnapcraftServiceFactory

factory = SnapcraftServiceFactory(
app=APP_METADATA,
project=default_project,
project=fake_project,
)
return factory


@pytest.fixture()
def package_service(default_project, default_factory):
def package_service(fake_project, default_factory):
from snapcraft.application import APP_METADATA
from snapcraft.services import Package

return Package(
app=APP_METADATA,
project=default_project,
project=fake_project,
services=default_factory,
platform="amd64",
build_for="amd64",
)


# pylint: enable=import-outside-toplevel


@pytest.fixture()
def provider_service(
app_metadata, fake_project, fake_build_plan, fake_services, tmp_path
Expand Down
27 changes: 16 additions & 11 deletions tests/unit/services/test_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,17 @@

def test_pack(package_service, default_factory, mocker):
mock_pack_snap = mocker.patch.object(pack, "pack_snap")
mock_linters_run = mocker.patch.object(linters, "run_linters")
mock_linters_report = mocker.patch.object(linters, "report")
mocker.patch.object(linters, "run_linters")
mocker.patch.object(linters, "report")

package_service.pack(prime_dir=Path("prime"), dest=Path())

# Check that the regular pack.pack_snap() function was called with the correct
# parameters.
mock_pack_snap.assert_called_once_with(
Path("prime"),
name="default",
version="1.0",
name="full-project",
version="1.0.0.post64+git12345678",
compression="xz",
output=".",
target_arch="amd64",
Expand All @@ -48,12 +48,12 @@ def test_metadata(package_service, default_factory, new_dir):
)

assert package_service.metadata == meta.SnapMetadata(
name="default",
title=None,
version="1.0",
summary=SummaryStr("default project"),
description="default project",
license="MIT",
name="full-project",
title="A fully-defined project",
version="1.0.0.post64+git12345678",
summary=SummaryStr("A fully-defined snapcraft project."),
description="A fully-defined snapcraft project. (description)",
license="GPLv3",
type=None,
architectures=["amd64"],
base="core24",
Expand All @@ -72,5 +72,10 @@ def test_metadata(package_service, default_factory, new_dir):
layout=None,
system_usernames=None,
provenance=None,
links=None,
links=meta.snap_yaml.Links( # type:ignore[reportCallIssue]
contact=["author@project.org"],
donation=None,
issues=["https://github.com/canonical/snapcraft/issues"],
source_code=["https://github.com/canonical/snapcraft"],
),
)

0 comments on commit 2ae71d1

Please sign in to comment.