package: Implement installing packages in the component

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Sunil Mohan Adapa 2021-11-16 08:21:08 -08:00 committed by James Valleroy
parent 2157cb33b7
commit d1b040cdb6
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
2 changed files with 38 additions and 1 deletions

View File

@ -6,6 +6,7 @@ Framework for installing and updating distribution packages
import json
import logging
import subprocess
import sys
import threading
from typing import Union
@ -50,6 +51,14 @@ class Packages(app.FollowerComponent):
"""Return the list of packages managed by this component."""
return self._packages
def setup(self, old_version):
"""Install the packages."""
# TODO: Drop the need for setup helper.
module_name = self.app.__module__
module = sys.modules[module_name]
helper = module.setup_helper
helper.install(self.packages, skip_recommends=self.skip_recommends)
class PackageException(Exception):
"""A package operation has failed."""

View File

@ -3,13 +3,16 @@
Test module for package module.
"""
from unittest.mock import call, patch
from unittest.mock import Mock, call, patch
import pytest
from plinth.app import App
from plinth.errors import ActionError
from plinth.package import Packages, packages_installed, remove
setup_helper = Mock()
def test_packages_init():
"""Test initialization of packages component."""
@ -26,6 +29,31 @@ def test_packages_init():
assert component.skip_recommends
def test_packages_setup():
"""Test setting up packages component."""
class TestApp(App):
"""Test app"""
app_id = 'test-app'
component = Packages('test-component', ['foo1', 'bar1'])
app = TestApp()
app.add(component)
setup_helper.reset_mock()
app.setup(old_version=3)
setup_helper.install.assert_has_calls(
[call(['foo1', 'bar1'], skip_recommends=False)])
component = Packages('test-component', ['foo2', 'bar2'],
skip_recommends=True)
app = TestApp()
app.add(component)
setup_helper.reset_mock()
app.setup(old_version=3)
setup_helper.install.assert_has_calls(
[call(['foo2', 'bar2'], skip_recommends=True)])
def test_packages_installed():
"""Test packages_installed()."""
# list as input