/** * 期待値の取得 * * @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]); }
/** * 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; }