Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lomiri.lomiri*: Init online accounts manager & settings plugin #340391

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from
20 changes: 20 additions & 0 deletions nixos/modules/services/desktop-managers/lomiri.nix
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ in {
systemPackages = (with pkgs; [
glib # XDG MIME-related tools identify it as GNOME, add gio for MIME identification to work
libayatana-common
syncevolution
ubports-click
]) ++ (with pkgs.lomiri; [
content-hub
Expand All @@ -22,16 +23,20 @@ in {
libusermetrics
lomiri
lomiri-calculator-app
lomiri-calendar-app
lomiri-camera-app
lomiri-clock-app
lomiri-docviewer-app
lomiri-download-manager
lomiri-filemanager-app
lomiri-gallery-app
lomiri-online-accounts
lomiri-online-accounts-plugins
lomiri-polkit-agent
lomiri-schemas # exposes some required dbus interfaces
lomiri-session # wrappers to properly launch the session
lomiri-sounds
lomiri-sync-monitor
lomiri-system-settings
lomiri-terminal-app
lomiri-thumbnailer
Expand Down Expand Up @@ -129,6 +134,8 @@ in {
};

environment.pathsToLink = [
# Paths for accountsservice service, applications, providers etc (TODO should this be enabled by services.accounts-daemon.enable?)
"/share/accounts"
# Configs for inter-app data exchange system
"/share/content-hub/peers"
# Configs for inter-app URL requests
Expand Down Expand Up @@ -169,6 +176,19 @@ in {
ExecStart = "${pkgs.lomiri.lomiri-polkit-agent}/libexec/lomiri-polkit-agent/policykit-agent";
};
};

# Alias doesn't get registered automatically
"lomiri-sync-monitor" = rec {
description = "Lomiri online account sync monitor plugin";
partOf = [ "graphical-session.target" ];
wants = [ "address-book-service.service" ];
serviceConfig = {
BusName = "com.lomiri.SyncMonitor";
ExecStart = "${pkgs.lomiri.lomiri-sync-monitor}/libexec/lomiri-sync-monitor/lomiri-sync-monitor";
};
aliases = [ "dbus-com.lomiri.SyncMonitor.service" ];
wantedBy = [ "graphical-session.target" ];
};
};

systemd.services = {
Expand Down
299 changes: 201 additions & 98 deletions nixos/tests/lomiri-system-settings.nix
Original file line number Diff line number Diff line change
@@ -1,99 +1,202 @@
import ./make-test-python.nix ({ pkgs, lib, ... }: {
name = "lomiri-system-settings-standalone";
meta.maintainers = lib.teams.lomiri.members;

nodes.machine = { config, pkgs, ... }: {
imports = [
./common/x11.nix
];

services.xserver.enable = true;

environment = {
systemPackages = with pkgs.lomiri; [
suru-icon-theme
lomiri-system-settings
];
variables = {
UITK_ICON_THEME = "suru";
import ./make-test-python.nix (
{ pkgs, lib, ... }:
{
name = "lomiri-system-settings-standalone";
meta.maintainers = lib.teams.lomiri.members;

nodes.machine =
{ config, pkgs, ... }:
{
imports = [ ./common/x11.nix ];

services.xserver.enable = true;

environment = {
systemPackages =
with pkgs.lomiri;
[
suru-icon-theme
lomiri-system-settings

# To test localisation of lomiri-online-accounts-plugins' QML plugin within LSS
lomiri-online-accounts-plugins
]
++ (with pkgs; [

# Mouse control
xdotool
]);
variables = {
UITK_ICON_THEME = "suru";
};
};

i18n.supportedLocales = [ "all" ];

fonts.packages = with pkgs; [
# Intended font & helps with OCR
ubuntu-classic
];

services.upower.enable = true;
};
};

i18n.supportedLocales = [ "all" ];

fonts.packages = with pkgs; [
# Intended font & helps with OCR
ubuntu-classic
];

services.upower.enable = true;
};

enableOCR = true;

testScript = let
settingsPages = [
# Base pages
{ name = "wifi"; type = "internal"; element = "networks"; }
{ name = "bluetooth"; type = "internal"; element = "discoverable|None detected"; }
# only text we can really look for with VPN is on a button, OCR on CI struggles with it
{ name = "vpn"; type = "internal"; element = "Add|Manual|Configuration"; skipOCR = true; }
{ name = "appearance"; type = "internal"; element = "Background image|blur effects"; }
{ name = "desktop"; type = "internal"; element = "workspaces|Icon size"; }
{ name = "sound"; type = "internal"; element = "Silent Mode|Message sound"; }
{ name = "language"; type = "internal"; element = "Display language|External keyboard"; }
{ name = "notification"; type = "internal"; element = "Apps that notify"; }
{ name = "gestures"; type = "internal"; element = "Edge drag"; }
{ name = "mouse"; type = "internal"; element = "Cursor speed|Wheel scrolling speed"; }
{ name = "timedate"; type = "internal"; element = "Time zone|Set the time and date"; }

# External plugins
{ name = "security-privacy"; type = "external"; element = "Locking|unlocking|permissions"; elementLocalised = "Sperren|Entsperren|Berechtigungen"; }
];
in
''
machine.wait_for_x()

with subtest("lomiri system settings launches"):
machine.execute("lomiri-system-settings >&2 &")
machine.wait_for_text("System Settings")
machine.screenshot("lss_open")

# Move focus to start of plugins list for following list of tests
machine.send_key("tab")
machine.send_key("tab")
machine.screenshot("lss_focus")

# tab through & open all sub-menus, to make sure none of them fail
'' + (lib.strings.concatMapStringsSep "\n" (page: ''
machine.send_key("tab")
machine.send_key("kp_enter")
''
+ lib.optionalString (!(page.skipOCR or false)) ''
with subtest("lomiri system settings ${page.name} works"):
machine.wait_for_text(r"(${page.element})")
machine.screenshot("lss_page_${page.name}")
'') settingsPages) + ''

machine.execute("pkill -f lomiri-system-settings")

with subtest("lomiri system settings localisation works"):
machine.execute("env LANG=de_DE.UTF-8 lomiri-system-settings >&2 &")
machine.wait_for_text("Systemeinstellungen")
machine.screenshot("lss_localised_open")

# Move focus to start of plugins list for following list of tests
machine.send_key("tab")
machine.send_key("tab")
machine.screenshot("lss_focus_localised")

'' + (lib.strings.concatMapStringsSep "\n" (page: ''
machine.send_key("tab")
machine.send_key("kp_enter")
'' + lib.optionalString (page.type == "external") ''
with subtest("lomiri system settings ${page.name} localisation works"):
machine.wait_for_text(r"(${page.elementLocalised})")
machine.screenshot("lss_localised_page_${page.name}")
'') settingsPages) + ''
'';
})

enableOCR = true;

testScript =
let
settingsPages = [
{
name = "wifi";
element = "networks";
elementLocalised = "Netzwerke";
}
{
name = "bluetooth";
element = "discoverable|None detected";
elementLocalised = "feststellbar|Keines gefunden";
}
{
name = "vpn";
element = "Add|Manual|Configuration";
# only text we can really look for with VPN is on a button, OCR on CI struggles with it
skipOCR = true;
}
{
name = "appearance";
element = "Background image|blur effects";
elementLocalised = "Hintergrundbild|Unschärfeeffekte";
}
{
name = "desktop";
element = "workspaces|Icon size";
# different elements/strings, OCR struggles with diacritics & ß
elementLocalised = "aktivieren|Starter immer";
}
{
name = "sound";
element = "Silent Mode|Message sound";
elementLocalised = "Stiller Modus|Nachrichtenton";
}
{
name = "language";
element = "Display language|External keyboard";
elementLocalised = "Anzeigesprache|Externe Tastatur";
}

# localised checks for created account, not same element
{
name = "online-accounts";
element = "No accounts";
elementLocalised = "Google";
# Check that LOA within LSSOA is localised
extraLocalised = ''
machine.succeed("xdotool mousemove 512 102 click 1")
machine.wait_for_text("Kennung")
machine.screenshot("lss_localised_page_online-accounts-plugin")

# Return focus
machine.send_key("shift-tab")
machine.send_key("shift-tab")
machine.send_key("shift-tab")
machine.send_key("shift-tab")
machine.send_key("shift-tab")
machine.send_key("shift-tab")
machine.send_key("shift-tab")
machine.send_key("shift-tab")
machine.send_key("shift-tab")
'';
}

{
name = "notification";
element = "Apps that notify";
elementLocalised = "Apps mit";
}
{
name = "gestures";
element = "Edge drag";
# Struggling with that word, let's pick some from a description
elementLocalised = "Kanten|Wischbereich";
}
{
name = "mouse";
element = "Cursor speed|Wheel scrolling speed";
elementLocalised = "Zeigergeschwindigkeit|Mausradgeschwindigkeit";
}
{
name = "timedate";
element = "Time zone|Set the time and date";
elementLocalised = "Zeitzone|Uhrzeit und Datum einstellen";
}

{
name = "security-privacy";
element = "Locking|unlocking|permissions";
elementLocalised = "Sperren|Entsperren|Berechtigungen";
}
];
in
''
machine.wait_for_x()

with subtest("lomiri system settings launches"):
machine.succeed("lomiri-system-settings >&2 &")
machine.wait_for_text("System Settings")
machine.screenshot("lss_open")

# Move focus to start of plugins list for following list of tests
machine.send_key("tab")
machine.send_key("tab")
machine.screenshot("lss_focus")

# tab through & open all sub-menus, to make sure none of them fail
''
+ (lib.strings.concatMapStringsSep "\n" (
page:
''
machine.send_key("tab")
machine.send_key("kp_enter")
''
+ lib.optionalString (!(page.skipOCR or false)) ''
with subtest("lomiri system settings ${page.name} works"):
machine.wait_for_text(r"(${page.element})")
machine.screenshot("lss_page_${page.name}")
''
) settingsPages)
+ ''

machine.succeed("pkill -f lomiri-system-settings")

# Preperation for checking i18n of lomiri-online-accounts, within LSS-online-accounts
machine.succeed("lomiri-account-console create google")

with subtest("lomiri system settings localisation works"):
# XDG_CURRENT_DESKTOP so online-accounts plugins get loaded
machine.succeed("env LANG=de_DE.UTF-8 XDG_CURRENT_DESKTOP=Lomiri lomiri-system-settings >&2 &")
machine.wait_for_text("Systemeinstellungen")
machine.screenshot("lss_localised_open")

# Move focus to start of plugins list for following list of tests
machine.send_key("tab")
machine.send_key("tab")
machine.screenshot("lss_focus_localised")

''
+ (lib.strings.concatMapStringsSep "\n" (
page:
''
machine.send_key("tab")
machine.send_key("kp_enter")
''
+ lib.optionalString (!(page.skipOCR or false)) (
''
with subtest("lomiri system settings ${page.name} localisation works"):
machine.wait_for_text(r"(${page.elementLocalised})")
machine.screenshot("lss_localised_page_${page.name}")
''
+ lib.optionalString (page ? extraLocalised) page.extraLocalised
)
) settingsPages);
}
)
Loading