#include <gtest/gtest.h>

// stupid hack to allow access to private/protected members under test
#define private public
#define protected public

#include <crepe/facade/DB.h>
#include <crepe/manager/SaveManager.h>

#include "ScriptTest.h"

using namespace std;
using namespace crepe;
using namespace testing;

class ScriptSaveManagerTest : public ScriptTest {
public:
	class TestSaveManager : public SaveManager {
		using SaveManager::SaveManager;

		// in-memory database for testing
		DB db{};
		virtual DB & get_db() override { return this->db; }
	};

	TestSaveManager save_mgr{mediator};
};

TEST_F(ScriptSaveManagerTest, GetSaveManager) {
	MyScript & script = this->script;

	SaveManager & mgr = script.get_save_manager();

	EXPECT_EQ(&mgr, &save_mgr);
}