/**
  * 期待値の取得
  *
  * @param int $id ID
  * @param array $data 登録データ
  * @param array $before 登録前データ
  * @param bool $created 作成かどうか
  * @return array
  */
 protected function _getExpected($id, $data, $before, $created)
 {
     $model = $this->_modelName;
     $expected = parent::_getExpected($id, $data, $before, $created);
     if ($created) {
         $expected[$this->{$model}->alias]['key'] = OriginalKeyBehavior::generateKey($this->{$model}->name, $this->{$model}->useDbConfig);
     }
     $expected[$this->{$model}->alias]['is_active'] = true;
     $expected[$this->{$model}->alias]['is_latest'] = true;
     return $expected;
 }
 /**
  * Saveのテスト
  *
  * @param array $data 登録データ
  * @dataProvider dataProviderSave
  * @return void
  */
 public function testSave($data)
 {
     $model = $this->_modelName;
     $method = $this->_methodName;
     //チェック用データ取得
     if (isset($data[$model][0]['id'])) {
         $before = $this->{$model}->find('first', array('recursive' => -1, 'conditions' => array('id' => $data[$this->{$model}->alias][0]['id'])));
     }
     //テスト実行
     $result = $this->{$model}->{$method}($data[$model]);
     $this->assertNotEmpty($result);
     //idのチェック
     if (isset($data[$this->{$model}->alias][0]['id'])) {
         $id = $data[$this->{$model}->alias][0]['id'];
     } else {
         $id = $this->{$model}->getLastInsertID();
     }
     //登録データ取得
     $actual = $this->{$model}->find('first', array('recursive' => -1, 'conditions' => array('id' => $id)));
     if (isset($data[$this->{$model}->alias][0]['id'])) {
         $actual[$this->{$model}->alias] = Hash::remove($actual[$this->{$model}->alias], 'modified');
         $actual[$this->{$model}->alias] = Hash::remove($actual[$this->{$model}->alias], 'modified_user');
     } else {
         $actual[$this->{$model}->alias] = Hash::remove($actual[$this->{$model}->alias], 'created');
         $actual[$this->{$model}->alias] = Hash::remove($actual[$this->{$model}->alias], 'created_user');
         $actual[$this->{$model}->alias] = Hash::remove($actual[$this->{$model}->alias], 'modified');
         $actual[$this->{$model}->alias] = Hash::remove($actual[$this->{$model}->alias], 'modified_user');
         if ($this->{$model}->hasField('key') && !isset($data[$this->{$model}->alias][0]['key'])) {
             $data[$this->{$model}->alias][0]['key'] = OriginalKeyBehavior::generateKey($this->{$model}->name, $this->{$model}->useDbConfig);
         }
         $before[$this->{$model}->alias] = array();
     }
     $expected[$this->{$model}->alias] = Hash::merge($before[$this->{$model}->alias], $data[$this->{$model}->alias][0], array('id' => $id));
     $expected[$this->{$model}->alias] = Hash::remove($expected[$this->{$model}->alias], 'modified');
     $expected[$this->{$model}->alias] = Hash::remove($expected[$this->{$model}->alias], 'modified_user');
     $expected = Hash::remove($expected, $this->{$model}->alias . '.RegistrationQuestion');
     $expected = Hash::remove($expected, $this->{$model}->alias . '.RegistrationChoice');
     $this->assertEquals($expected[$this->{$model}->alias], $actual[$this->{$model}->alias]);
 }
Beispiel #3
0
 /**
  * saveHolidayRrule
  *
  * RRULEデータ登録処理
  *
  * @param array $data 登録データ
  * @return bool True on success, false on validation errors
  * @throws InternalErrorException
  */
 public function saveHolidayRrule($data)
 {
     $this->loadModels(['Holiday' => 'Holidays.Holiday']);
     // SetされているPostデータを整える
     // 月日入力はCakeの仕様のため、month, day に分割されてしまっているので
     // DBに入れやすいようにまとめなおす
     if (isset($data[$this->alias]['input_month_day']['day'])) {
         $day = $data[$this->alias]['input_month_day']['day'];
     } else {
         $day = '01';
     }
     $monthDay = $data[$this->alias]['input_month_day']['month'] . '-' . $day;
     $data[$this->alias]['month_day'] = '2001' . '-' . $monthDay;
     //開始年
     $orgStartYear = $this->getStartYearFromPostData($data[$this->alias]);
     $data[$this->alias]['start_year'] = $orgStartYear . '-01-01';
     //終了年
     $orgEndYear = $this->getEndYearFromPostData($data[$this->alias]);
     $data[$this->alias]['end_year'] = $orgEndYear . '-12-31';
     // Rrule文字列(NetCommons3は未設定)
     $data[$this->alias]['rrule'] = '';
     //トランザクションBegin
     $this->begin();
     try {
         $this->set($data[$this->alias]);
         if (!$this->validates()) {
             $this->rollback();
             return false;
         }
         if (!$this->save($data[$this->alias], false)) {
             throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
         }
         // 更新したRruleID
         if (!empty($data[$this->alias]['id'])) {
             $rRuleId = $data[$this->alias]['id'];
         } else {
             $rRuleId = $this->getLastInsertID();
         }
         // 以前の祝日データを削除
         $this->Holiday->deleteAll(array('holiday_rrule_id' => $rRuleId), false, true);
         // Rruleから実際の日付配列を取得
         $days = $this->_getDays($data[$this->alias], $orgStartYear, $orgEndYear);
         // 取得した日付の数分Holidayを登録
         $holiday = Hash::remove($data['Holiday'], '{n}.id');
         $holiday = Hash::insert($holiday, '{n}.holiday_rrule_id', $rRuleId);
         foreach ($days as $day) {
             //休日取得(固定休日/可変休日)
             $day = $this->variable($data, $day);
             $holiday = Hash::insert($holiday, '{n}.holiday', $day);
             //キー設定( 日本語と英語は同じキー)
             //if (empty($data['Holiday'][0]['key'])) {
             $key = OriginalKeyBehavior::generateKey('HolidayRrule', $this->useDbConfig);
             $holiday = Hash::insert($holiday, '{n}.key', $key);
             //}
             //休日登録
             if (!$this->saveHolidayData($data, $holiday)) {
                 return false;
             }
         }
         $this->commit();
     } catch (Exception $ex) {
         $this->rollback();
         CakeLog::error($ex);
         return false;
     }
     return true;
 }