#ifndef MOCKDEFS_H
#define MOCKDEFS_H

#include <pq-mock.h>
#include <visibility.h>
#include <dryice.h>
#include <portage.h>
#include <users.h>
#include <maintenance.h>
#include <notifications.h>
#include <mocks.h>
#include <selectcommandUtil.impl.h>

class MockMailServerImpl : public Gentoo::MockMailServer {
	public:
		void sendEmail(const Gentoo::EmailPtr & msg, const Ice::Current &) override;
		Gentoo::Emails getSentEmails(const Ice::Current &) override;

	private:
		Gentoo::Emails sentEmails;
};

class DLL_PUBLIC Service : public IceTray::DryIce, PQ::Mock {
	public:
		Service();
};

class DLL_PUBLIC Maintenance : public IceTray::DryIce, PQ::Mock {
	public:
		Maintenance();
};

class DLL_PUBLIC Mail : public IceTray::DryIce {
	public:
		Mail();
};

class DLL_PUBLIC TestClient : public IceTray::DryIceClient {
	public:
		TestClient();

		Gentoo::MaintenancePrx m;
		Gentoo::PortagePrx p;
		Gentoo::NotificationsPrx n;
		Gentoo::MailServerPrx ms;
		Gentoo::UsersPrx u;
};

#define SQL_REQUIRE_EQUAL(sql, type, expected) \
	db->select(sql)->forEachRow<type>([&expected](const auto & n) { BOOST_REQUIRE_EQUAL(expected, n); });

#endif