function testIsExpiredShouldBeFalse()
 {
     $date_begin = new DateTime('2015-10-01 00:00:00+09:00');
     $date_end = new DateTime('2015-10-01 10:00:00+09:00');
     $period = new MovieViewerPeriod($date_begin, $date_end);
     $date_target = new DateTime('2015-10-01 09:59:59+09:00');
     timecop_freeze($date_target->getTimestamp());
     $this->assertFalse($period->isExpired($date_target));
     $this->assertFalse($period->isExpired());
 }
 function testFindValidsByUserReturnsValidConfirmations_Two()
 {
     // 視聴期限ぴったり
     $date_freeze = new DateTime("2015-08-15 00:00:00+09:00");
     timecop_freeze($date_freeze->getTimestamp());
     $settings = plugin_movieviewer_get_global_settings();
     $repo = new MovieViewerDealPackPaymentConfirmationRepositoryInFile($settings);
     $objects = $repo->findValidsByUser("*****@*****.**");
     $this->assertEquals(2, count($objects));
     $this->assertEquals("K1Kiso-1", $objects[0]->getPack()->getId());
     $this->assertEquals("K2Kiso-1", $objects[1]->getPack()->getId());
 }
 function testFindNotYetConfirmedByUserReturnsObjects()
 {
     $date_freeze = new DateTime("2015-08-14 23:59:59+09:00");
     timecop_freeze($date_freeze->getTimestamp());
     // 常にファイルの状態を同じにしたいなので、data dir を専用のものにする
     $settings = new MovieViewerSettings();
     $settings->data["dir"] = "test/models/resources_not_yet_confirmed";
     $settings->timezone = new DateTimeZone("Asia/Tokyo");
     $repo = new MovieViewerReviewPackPurchaseRequestRepositoryInFile($settings);
     $objects = $repo->findNotYetConfirmed("*****@*****.**");
     $this->assertEquals(1, count($objects));
     $object = $objects[0];
     $this->assertEquals("*****@*****.**", $object->user_id);
 }
 function testStoreSaveToFile()
 {
     $date_freeze = new DateTime("2015-08-14 23:59:59+09:00");
     timecop_freeze($date_freeze->getTimestamp());
     $settings = plugin_movieviewer_get_global_settings();
     $repo = new MovieViewerReviewPackPaymentConfirmationRepositoryInFile($settings);
     $request = new MovieViewerReviewPackPurchaseRequest("*****@*****.**", "credit", array("K1Kiso_01"));
     $object = MovieViewerReviewPackPaymentConfirmation::createFromRequest($request, null);
     $repo->store($object);
     $object = $repo->findBy("*****@*****.**", "20150814235959+0900");
     $this->assertEquals("*****@*****.**", $object->user_id);
     $this->assertEquals("credit", $object->purchase_method);
     $items = $object->getItems();
     $this->assertEquals(1, count($items));
     $this->assertEquals("K1Kiso", $items[0]->course_id);
     $this->assertEquals("01", $items[0]->session_id);
     $viewing_period = $object->getViewingPeriod();
     $this->assertEquals(new DateTime("2015-08-16 00:00:00+09:00"), $viewing_period->date_begin);
     $this->assertEquals(new DateTime("2015-09-15 23:59:59+09:00"), $viewing_period->date_end);
 }
define('PLUGIN_MOVIEVIEWER_LOG_DIR', PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR);
// ユーザ設定ファイルを読み込む
$user_ini_file = PLUGIN_MOVIEVIEWER_PLUGIN_DIR . '/movieviewer.ini.user.php';
if (file_exists($user_ini_file)) {
    include_once $user_ini_file;
} else {
    // ファイルがない場合は開発環境の設定にしておく
    define('PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS_USER_DEFAULT', "/vagrant/resources/default/settings/settings.yml");
    define('PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS_USER_TEST', "/vagrant/resources/test/settings/settings.yml");
}
if (!file_exists(PLUGIN_MOVIEVIEWER_PUKIWIKI_DIR . "/.movieviewer_env_feature_test")) {
    define('PLUGIN_MOVIEVIEWER_ENV', '');
    define('PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS', PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS_USER_DEFAULT);
} else {
    define('PLUGIN_MOVIEVIEWER_ENV', 'Feature Test');
    define('PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS', PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS_USER_TEST);
    // 強制的に時間を固定する (要:timecopのインストール)
    $date_freeze = new DateTime("2015-10-01 00:00:00+09:00", new DateTimeZone("Asia/Tokyo"));
    timecop_freeze($date_freeze->getTimestamp());
}
define('PLUGIN_MOVIEVIEWER_AUTH_MODULE_DEFAULT', "default");
define('PLUGIN_MOVIEVIEWER_AUTH_MODULE_COMMU', "commu");
require_once PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR . "/functions.php";
require_once PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR . "/models/index.php";
require_once PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR . "/repositories.php";
require_once PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR . "/validators.php";
require_once PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR . "/managers.php";
require_once PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR . "/services.php";
require_once PLUGIN_MOVIEVIEWER_MOVIEVIEWER_DIR . "/vendor/autoload.php";
require_once PLUGIN_MOVIEVIEWER_PUKIWIKI_DIR . "/lib/qdmail.php";
require_once PLUGIN_MOVIEVIEWER_PUKIWIKI_DIR . "/lib/qdsmtp.php";
 public function __construct($datetime)
 {
     timecop_freeze(strtotime($datetime));
 }
 function testGetOffersShouldReturnNextCourseOfferWhenFirstPackEndedBothRoutes()
 {
     $date_freeze = new DateTime("2015-10-15 00:00:00+09:00");
     timecop_freeze($date_freeze->getTimestamp());
     $user = new MovieViewerUser();
     $user->id = "*****@*****.**";
     $user->selected_routes = array(new MovieViewerCourseRoute(array("K1Kiso", "OABunka")), new MovieViewerCourseRoute(array("K2Kiso")));
     $settings = plugin_movieviewer_get_global_settings();
     $maker = new MovieViewerDealPackOfferMaker($settings->payment, $user);
     $offers = $maker->getOffers();
     $this->assertCount(1, $offers);
     $this->assertEquals("OABunka-1", $offers[0]->getPackId());
 }