{ pkgs, lib, self }:

let
  sampleDesktopName = "horizontal-hunger";
in
lib.runTests {
  testsBuilderMakeSampleXDGAssociationList = {
    expr =
      let
        xdgAssociations = self.builders.makeXDGMimeAssociationList {
          defaultApplications = {
            "application/pdf" = "firefox.desktop";
          };
        };
      in builtins.readFile "${xdgAssociations}/share/applications/mimeapps.list";
    expected =
      builtins.readFile ./data/fixtures/xdg-mime-sample-mimeapps.list;
  };

  # This should only create the "Default Applications" section of the
  # specific-desktop mimeapps.list.
  testsBuilderMakeSampleDesktopSpecificXDGAssociationList = {
    expr =
      let
        xdgAssociations = self.builders.makeXDGMimeAssociationList {
          desktopName = sampleDesktopName;
          defaultApplications = {
            "application/pdf" = "firefox.desktop";
          };
        };
      in builtins.readFile "${xdgAssociations}/share/applications/${sampleDesktopName}-mimeapps.list";
    expected =
      builtins.readFile ./data/fixtures/xdg-mime-sample-desktop-specific-mimeapps.list;
  };

  testsBuilderMakeSampleXDGPortalCommonConfig = {
    expr =
      let
        xdgPortalConf = self.builders.makeXDGPortalConfiguration {
          config.preferred = {
            default = "gtk";
            "org.freedesktop.impl.portal.Screencast" = "gnome";
          };
        };
      in
        builtins.readFile "${xdgPortalConf}/share/xdg-desktop-portal/portals.conf";
    expected =
      builtins.readFile ./data/fixtures/xdg-portal.conf;
  };

  # We're just testing out if the destination is correct at this point.
  testsBuilderMakeSampleXDGPortalDesktopSpecificConfig = {
    expr =
      let
        xdgPortalConf = self.builders.makeXDGPortalConfiguration {
          desktopName = sampleDesktopName;
          config.preferred = {
            default = "gtk";
            "org.freedesktop.impl.portal.Screencast" = "gnome";
          };
        };
      in
        builtins.readFile "${xdgPortalConf}/share/xdg-desktop-portal/${sampleDesktopName}-portals.conf";
    expected =
      builtins.readFile ./data/fixtures/xdg-portal.conf;
  };

  # We're just testing out if the destination is correct at this point.
  testsBuilderMakeSampleXDGDesktopEntry = {
    expr =
      let
        xdgDesktopEntry = self.builders.makeXDGDesktopEntry {
          name = sampleDesktopName;
          validate = false;
          config = {
            "Desktop Entry".Exec = "Hello";
          };
        };
      in
        builtins.readFile "${xdgDesktopEntry}/share/applications/${sampleDesktopName}.desktop";
    expected =
      builtins.readFile ./data/fixtures/xdg-desktop-entry.desktop;
  };

  # We're just testing out if the destination is correct at this point.
  testsBuilderMakeSampleDesktopSessionFile = {
    expr =
      let
        xdgDesktopEntry = self.builders.makeXDGDesktopEntry {
          name = sampleDesktopName;
          validate = false;
          destination = "/share/wayland-sessions/${sampleDesktopName}.desktop";
          config = {
            "Desktop Entry" = {
              Exec = "Hello";
              DesktopNames = [ "GNOME" "Sway" ];
            };
          };
        };
      in
        builtins.readFile "${xdgDesktopEntry}/share/wayland-sessions/${sampleDesktopName}.desktop";
    expected =
      builtins.readFile ./data/fixtures/xdg-desktop-session.desktop;
  };
}