mirror of
https://github.com/logos-co/logos-package-manager.git
synced 2026-08-27 10:11:07 +00:00
95 lines
2.8 KiB
C++
95 lines
2.8 KiB
C++
#include <gtest/gtest.h>
|
|
#include "package_manager_lib.h"
|
|
#include <filesystem>
|
|
#include <fstream>
|
|
#include <nlohmann/json.hpp>
|
|
|
|
namespace fs = std::filesystem;
|
|
using json = nlohmann::json;
|
|
|
|
class ScanDedupTest : public ::testing::Test {
|
|
protected:
|
|
fs::path embeddedDir;
|
|
fs::path userDir;
|
|
|
|
void SetUp() override {
|
|
auto base = fs::temp_directory_path() / ("lgpm_dedup_" + std::to_string(std::rand()));
|
|
embeddedDir = base / "embedded";
|
|
userDir = base / "user";
|
|
fs::create_directories(embeddedDir);
|
|
fs::create_directories(userDir);
|
|
}
|
|
|
|
void TearDown() override {
|
|
std::error_code ec;
|
|
fs::remove_all(embeddedDir.parent_path(), ec);
|
|
}
|
|
|
|
void writeManifest(const fs::path& parentDir,
|
|
const std::string& name,
|
|
const std::string& version,
|
|
const std::string& type = "core") {
|
|
fs::path dir = parentDir / name;
|
|
fs::create_directories(dir);
|
|
|
|
json manifest;
|
|
manifest["name"] = name;
|
|
manifest["type"] = type;
|
|
manifest["version"] = version;
|
|
|
|
std::ofstream mf(dir / "manifest.json");
|
|
mf << manifest.dump(2);
|
|
}
|
|
};
|
|
|
|
TEST_F(ScanDedupTest, UserWinsOverEmbeddedForSameName) {
|
|
writeManifest(embeddedDir, "widget", "1.0.0");
|
|
writeManifest(userDir, "widget", "2.0.0");
|
|
|
|
PackageManagerLib pm;
|
|
pm.setEmbeddedModulesDirectory(embeddedDir.string());
|
|
pm.setUserModulesDirectory(userDir.string());
|
|
|
|
auto modules = pm.getInstalledModules();
|
|
ASSERT_EQ(modules.size(), 1u);
|
|
EXPECT_EQ(modules[0].name, "widget");
|
|
EXPECT_EQ(modules[0].version, "2.0.0");
|
|
EXPECT_EQ(modules[0].installType, InstallType::User);
|
|
}
|
|
|
|
TEST_F(ScanDedupTest, EmbeddedOnlyShowsAsEmbedded) {
|
|
writeManifest(embeddedDir, "builtin", "1.0.0");
|
|
|
|
PackageManagerLib pm;
|
|
pm.setEmbeddedModulesDirectory(embeddedDir.string());
|
|
|
|
auto modules = pm.getInstalledModules();
|
|
ASSERT_EQ(modules.size(), 1u);
|
|
EXPECT_EQ(modules[0].installType, InstallType::Embedded);
|
|
}
|
|
|
|
TEST_F(ScanDedupTest, UserOnlyShowsAsUser) {
|
|
writeManifest(userDir, "installed", "1.0.0");
|
|
|
|
PackageManagerLib pm;
|
|
pm.setUserModulesDirectory(userDir.string());
|
|
|
|
auto modules = pm.getInstalledModules();
|
|
ASSERT_EQ(modules.size(), 1u);
|
|
EXPECT_EQ(modules[0].installType, InstallType::User);
|
|
}
|
|
|
|
TEST_F(ScanDedupTest, DedupWorksForGetInstalledPackages) {
|
|
writeManifest(embeddedDir, "shared", "1.0.0", "core");
|
|
writeManifest(userDir, "shared", "2.0.0", "core");
|
|
|
|
PackageManagerLib pm;
|
|
pm.setEmbeddedModulesDirectory(embeddedDir.string());
|
|
pm.setUserModulesDirectory(userDir.string());
|
|
|
|
auto pkgs = pm.getInstalledPackages();
|
|
ASSERT_EQ(pkgs.size(), 1u);
|
|
EXPECT_EQ(pkgs[0].version, "2.0.0");
|
|
EXPECT_EQ(pkgs[0].installType, InstallType::User);
|
|
}
|