drop support for polls created with Croodle <= 0.3.x (#709)
This commit is contained in:
parent
83c994c363
commit
8a4954f4e8
7 changed files with 1 additions and 438 deletions
|
@ -177,11 +177,6 @@ class Model {
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = self::convertFromStorage($storageObject);
|
$data = self::convertFromStorage($storageObject);
|
||||||
|
|
||||||
if(method_exists($model, 'restoreLegacySupportHook')) {
|
|
||||||
$model->restoreLegacySupportHook($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
$properties = array_merge(
|
$properties = array_merge(
|
||||||
static::ENCRYPTED_PROPERTIES,
|
static::ENCRYPTED_PROPERTIES,
|
||||||
static::PLAIN_PROPERTIES,
|
static::PLAIN_PROPERTIES,
|
||||||
|
|
|
@ -125,20 +125,4 @@ class Poll extends model {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function restoreLegacySupportHook(&$data) {
|
|
||||||
if (!isset($data->version) || $data->version === 'v0.3-0') {
|
|
||||||
if (isset($data->poll) && is_object($data->poll)) {
|
|
||||||
$data = $data->poll;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($data as $key => $value) {
|
|
||||||
if (strpos($key, 'encrypted') === 0) {
|
|
||||||
$newKey = lcfirst(substr($key, 9));
|
|
||||||
$data->$newKey = $data->$key;
|
|
||||||
unset($data->$key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,20 +74,4 @@ class User extends Model {
|
||||||
Poll::isValidId($parts[0]) &&
|
Poll::isValidId($parts[0]) &&
|
||||||
intval($parts[1]) == $parts[1];
|
intval($parts[1]) == $parts[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function restoreLegacySupportHook(&$data) {
|
|
||||||
if (!isset($data->version) || $data->version === 'v0.3-0') {
|
|
||||||
if (isset($data->user) && is_object($data->user)) {
|
|
||||||
$data = $data->user;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($data as $key => $value) {
|
|
||||||
if (strpos($key, 'encrypted') === 0) {
|
|
||||||
$newKey = lcfirst(substr($key, 9));
|
|
||||||
$data->$newKey = $data->$key;
|
|
||||||
unset($data->$key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,126 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
$pollId = substr(md5(__FILE__), 0, 10);
|
|
||||||
$pollJson = <<<EOD
|
|
||||||
{
|
|
||||||
"poll": {
|
|
||||||
"encryptedTitle": "{\"iv\":\"G1QGS+OHz5Z6Y4Og/3UFRQ==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"rgMRyJep4e0+Jj+K0ZTqbJS1j/gaouoTCoSHgXFdccn5L9gHBo1JO7Sl\"}",
|
|
||||||
"encryptedDescription": "{\"iv\":\"StcBqdGghIip/N3gLFmTMQ==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"5fgh7XABR7OifXoqHxE+c89mnVwkKUAG+x7D+BOGzoZK8dGT\"}",
|
|
||||||
"encryptedPollType": "{\"iv\":\"JYFdfUTb6xLWja302/bAKQ==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"wW+J3cGGF1tQUNfxt4gENDcZXQ==\"}",
|
|
||||||
"encryptedAnswerType": "{\"iv\":\"i0lDlvIVg2Le8pBSb47CIA==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"+LNTLmILvxsN1X6E+vWa\"}",
|
|
||||||
"encryptedAnswers": "{\"iv\":\"xQV29b/F+gvlLl0zDCB7yw==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"n5CwLLhSE5d28NU2/rOB7o6tXXWdDE7/uPr951Rr2ZQsmhsadmVwYE0K3Cxt+Hif4Am1jliS+PFjgVralrsSB00vlIH53wvDqQmNdk1Q/2zIebsVhHueamL4REyXn+18uVrjRarioojwOPYJLxNJHh0kPHATd0TgJxTb87RXgqUvAr1xc6DL7hY+fIbGoa6Otzt+OqIPhRTpaL+My1TYFXWQSlJxpPVSOILe1G/y6wg3Cp1lx4aFdHmGOGmrW+EF5pW9XrIz4A+3kNapSyUsDyuMk8wejrJpRHNcFpIlyRkxgUU=\"}",
|
|
||||||
"encryptedOptions": "{\"iv\":\"ruAw1xvAVLh9D19ngrEDgw==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"pl1JeMRamWBuScBb1QOT9eqheJG2KD3y8RjtoPhNVid90wmoOQDm6WGtwt+gz6QXQEWUmIIXt8lyAJTH7updSnceW1SihfDi7xMmPTOf/338uSt3RdA2q+F+skiT14gheXHMtSFQaeVGvS8QfDXQfJBY9zJYp+On\"}",
|
|
||||||
"encryptedCreationDate": "{\"iv\":\"H/eApLF+Ja7ebX/1tPg7+w==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"8BhpHOrgM3L7XftckMdkXSFzXi2evkfheanKfcjMFxzYsg==\"}",
|
|
||||||
"encryptedForceAnswer": "{\"iv\":\"DapF8f4GhKPORoIrDPiRXg==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"WfPqwu5yBkhrHJWR\"}",
|
|
||||||
"encryptedAnonymousUser": "{\"iv\":\"sIclbapCBCxkHi0QrlCqOA==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"SXyhfk7DVgfVKfp7Kw==\"}",
|
|
||||||
"encryptedIsDateTime": "{\"iv\":\"CbB/QEzDlENL3qRK2ZjWxA==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"TD0rnzzHaawAWyUP\"}",
|
|
||||||
"encryptedTimezone": "{\"iv\":\"wQQXNefWW5QC9VZ1KkQQmA==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"5Zkx8f0WQAgBBG1s0DcxoHeA5Dc/fEI=\"}",
|
|
||||||
"version": "v0.3-0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOD;
|
|
||||||
$user1Json = <<<EOD
|
|
||||||
{
|
|
||||||
"user": {
|
|
||||||
"encryptedName": "{\"iv\":\"wibexCADUTTMP8vjmegTwA==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"r6Vu5fzAgvXctXaCx70/Pr1ldaOE\"}",
|
|
||||||
"encryptedSelections": "{\"iv\":\"gCMgC5Rie++L3s42RGzQJg==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"jTmkMEkFTUiy8vGJinXAUmi7u8RNQ/FnLgnd+CMKL2XtqjeZuXgfMMDAdTEZnzNQTK7p/IhHBZrcrksUTnWkv68+f76msMs3rOqnYi7jhVL7O7NZMVNXysAgzalrQ+78Zz8TqoJ1qIARksTTCOi7Md07XKkYptCr3QUu0r8kfgk3KbGDuIE3tS4gGuB5CLKuPfFcbE0DjWAcr9IIEXpSPgjzJyEAx3bDd89ZfbRE0RaMoAR7Vqx+L3Hs6pXoUSbtnBJOQypNQYqUYycWA/kxCcuQEBlHwIR5qq7c9VsXNBG9SfGSA62scmbg6pxVXd3jEyTaxw3+B5r705mpMgAEY6NiJykob34x8LThdJP7XZKfe/tyczcKAlcQtJ7ocQsac0l1gRLK6eKHcNs8I3Zzi5iBzyqZtg0OVHzI8NiYpjwvg7piTHawsujAZIYkw/S4Pt29wkbb/heWpUsdJOF2xlfYYkTHnrPbX5jwZbNIgA==\"}",
|
|
||||||
"encryptedCreationDate": "{\"iv\":\"NGuUKkuLbabetQG5co01ZA==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"ratk7+pQ14nax+slSf7ttOk2IIbQx7W2iu3I5VuUIR8RGg==\"}",
|
|
||||||
"version": "v0.3-0",
|
|
||||||
"poll": "gpwW7uZhbP"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOD;
|
|
||||||
$user2Json = <<<EOD
|
|
||||||
{
|
|
||||||
"user": {
|
|
||||||
"encryptedName": "{\"iv\":\"GsRvWloC3GYi+MoOCUQ1vg==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"0upVYhihQhWZcWpXcx5xKGHOTKTcVptz\"}",
|
|
||||||
"encryptedSelections": "{\"iv\":\"1FQ0Bf91k3JQbr23AhTszg==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"u6qAugU7o/gTUvjaBrSjlNsU1AJ5oIPiSqrXs7iC7117ss2iX0aENcwsGG09XUk+K1llyrGAI7Fp2uBqn6fyujpacJrJG5oO7SR7F8xwc5TpMlWp/CHN2C9VPdOnm8KhdDtt6IUbNV+McjBxa3FtNVttkF4FAtUGYSurrrEscRad7bvSVbYzYkMs+83xS/ui+pJ3NLuNPntfErRIJw3EKacaUfm2eHCftBVvPHTy3AQbJ9mSKy3tMch+qu1nLnyFSMKjRieCFOgkT3LkQcvfpSteV3V/UNfm82ERy7AYOB8KZ0hW1R/vDp2R+EjFS3/0cw+a8luW6HGcyY0fs18uIbsSUaLOiThKTjp9pYhupXEa9gz1DeZMC51M79Ha4YC9uy3AyG5hH29DYF5yhBPD1Z0iYcgosJ8TweiYN0AvlCYsy939VRSzFGeiI/ZFN76DF0YP1LAOK9bTXHN9n8oyDoQbBMKcY48/uWZZpCAvBw==\"}",
|
|
||||||
"encryptedCreationDate": "{\"iv\":\"gLvf5OObVV10vRrQbMcrDw==\",\"v\":1,\"iter\":1000,\"ks\":128,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"sWHHRuInJDY=\",\"ct\":\"2S5gjZmZ8QQRPfovPpLTbvQLsurgNIHXhkG0Ze8OpTScCw==\"}",
|
|
||||||
"version": "v0.3-0",
|
|
||||||
"poll": "gpwW7uZhbP"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOD;
|
|
||||||
|
|
||||||
$pollDir = 'tests/_tmp/data/' . $pollId . '/';
|
|
||||||
$userDir = $pollDir . 'user/';
|
|
||||||
mkdir($pollDir);
|
|
||||||
file_put_contents($pollDir . 'poll_data', $pollJson);
|
|
||||||
mkdir($userDir);
|
|
||||||
file_put_contents($userDir . '0', $user1Json);
|
|
||||||
file_put_contents($userDir . '1', $user2Json);
|
|
||||||
|
|
||||||
$I = new ApiTester($scenario);
|
|
||||||
$I->wantTo('get an existing legacy (v0.3.0) poll with users');
|
|
||||||
$I->sendGET('/polls/' . $pollId);
|
|
||||||
$I->seeResponseCodeIs(200);
|
|
||||||
$I->seeHttpHeader('Content-Type', 'application/json');
|
|
||||||
$I->seeHttpHeader('Expires', '-1');
|
|
||||||
$I->seeResponseIsJson();
|
|
||||||
|
|
||||||
$pollData = json_decode($pollJson, true)["poll"];
|
|
||||||
unset($pollData["serverExpirationDate"]);
|
|
||||||
unset($pollData["encryptedIsDateTime"]);
|
|
||||||
unset($pollData["encryptedAnswers"]);
|
|
||||||
foreach($pollData as $key => $value) {
|
|
||||||
if (strpos($key, 'encrypted') === 0) {
|
|
||||||
$key = lcfirst(substr($key, 9));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$key = $key;
|
|
||||||
}
|
|
||||||
$I->seeResponseContainsJson(
|
|
||||||
array(
|
|
||||||
'poll' => array(
|
|
||||||
$key => $value
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$I->seeResponseContainsJson(["poll" => ["id" => $pollId]]);
|
|
||||||
$I->dontSeeResponseJsonMatchesJsonPath('poll.serverExpirationDate');
|
|
||||||
$I->seeResponseJsonMatchesJsonPath('poll.users');
|
|
||||||
$users = $I->grabDataFromResponseByJsonPath('poll.users')[0];
|
|
||||||
\PHPUnit_Framework_Assert::assertTrue(
|
|
||||||
is_array($users),
|
|
||||||
'user should be an array'
|
|
||||||
);
|
|
||||||
\PHPUnit_Framework_Assert::assertEquals(
|
|
||||||
count($users),
|
|
||||||
2,
|
|
||||||
'user array should contain 2 users'
|
|
||||||
);
|
|
||||||
|
|
||||||
function wellformUser($user) {
|
|
||||||
$return = $user["user"];
|
|
||||||
foreach ($return as $key => $value) {
|
|
||||||
if(strpos($key, 'encrypted') === 0) {
|
|
||||||
$return[lcfirst(substr($key, 9))] = $value;
|
|
||||||
unset($return[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
$I->seeResponseContainsJson([
|
|
||||||
"poll" => [
|
|
||||||
"users" => [
|
|
||||||
wellformUser(json_decode($user1Json, true)),
|
|
||||||
wellformUser(json_decode($user2Json, true))
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
|
|
||||||
$I->seeResponseJsonMatchesJsonPath('poll.users.0.id');
|
|
||||||
$I->seeResponseJsonMatchesJsonPath('poll.users.1.id');
|
|
||||||
$user1Id = $I->grabDataFromResponseByJsonPath('poll.users.0.id')[0];
|
|
||||||
$user2Id = $I->grabDataFromResponseByJsonPath('poll.users.1.id')[0];
|
|
||||||
\PHPUnit_Framework_Assert::assertTrue(
|
|
||||||
$user1Id !== $user2Id,
|
|
||||||
'user ids are unique'
|
|
||||||
);
|
|
||||||
\PHPUnit_Framework_Assert::assertEquals(
|
|
||||||
explode('_', $user1Id)[0],
|
|
||||||
$pollId,
|
|
||||||
'user id starts by poll id'
|
|
||||||
);
|
|
|
@ -39,11 +39,6 @@ export default class ApplicationSerializer extends RESTSerializer {
|
||||||
}
|
}
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
// run legacy support transformation specified in model serializer
|
|
||||||
if (typeof this.legacySupport === 'function') {
|
|
||||||
resourceHash = this.legacySupport(resourceHash);
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.normalize(modelClass, resourceHash, prop);
|
return super.normalize(modelClass, resourceHash, prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,35 +1,3 @@
|
||||||
import classic from 'ember-classic-decorator';
|
|
||||||
import { isEmpty } from '@ember/utils';
|
|
||||||
import ApplicationSerializer from './application';
|
import ApplicationSerializer from './application';
|
||||||
|
|
||||||
@classic
|
export default class UserSerializer extends ApplicationSerializer {}
|
||||||
export default class UserSerializer extends ApplicationSerializer {
|
|
||||||
legacySupport(resourceHash) {
|
|
||||||
/*
|
|
||||||
* Croodle <= 0.3.0:
|
|
||||||
* * for answer type "freetext":
|
|
||||||
* selections where a string containing label
|
|
||||||
* * all other answer types ("YesNo", "YesNoMaybe"):
|
|
||||||
* selections where stored as child object of "value" property
|
|
||||||
* and selection property "type" where named "id"
|
|
||||||
*/
|
|
||||||
if (!isEmpty(resourceHash.selections[0].value)) {
|
|
||||||
resourceHash.selections.forEach(function (selection, index) {
|
|
||||||
if (typeof selection.value === 'string') {
|
|
||||||
resourceHash.selections[index] = {
|
|
||||||
label: selection.value,
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
resourceHash.selections[index] = {
|
|
||||||
icon: selection.value.icon,
|
|
||||||
label: selection.value.label,
|
|
||||||
labelTranslation: selection.value.labelTranslation,
|
|
||||||
type: selection.value.id,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return resourceHash;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,237 +0,0 @@
|
||||||
import { currentRouteName, find, findAll, visit } from '@ember/test-helpers';
|
|
||||||
import { module, test } from 'qunit';
|
|
||||||
import { setupApplicationTest } from 'ember-qunit';
|
|
||||||
import { setupMirage } from 'ember-cli-mirage/test-support';
|
|
||||||
import { setupIntl, t } from 'ember-intl/test-support';
|
|
||||||
import switchTab from 'croodle/tests/helpers/switch-tab';
|
|
||||||
import pollParticipate from 'croodle/tests/helpers/poll-participate';
|
|
||||||
import PollEvaluationPage from 'croodle/tests/pages/poll/evaluation';
|
|
||||||
|
|
||||||
module('Acceptance | legacy support', function (hooks) {
|
|
||||||
let yesLabel;
|
|
||||||
let maybeLabel;
|
|
||||||
let noLabel;
|
|
||||||
|
|
||||||
hooks.beforeEach(function () {
|
|
||||||
window.localStorage.setItem('locale', 'en');
|
|
||||||
});
|
|
||||||
|
|
||||||
setupApplicationTest(hooks);
|
|
||||||
setupIntl(hooks);
|
|
||||||
setupMirage(hooks);
|
|
||||||
|
|
||||||
hooks.beforeEach(function () {
|
|
||||||
yesLabel = t('answerTypes.yes.label').toString();
|
|
||||||
maybeLabel = t('answerTypes.maybe.label').toString();
|
|
||||||
noLabel = t('answerTypes.no.label').toString();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('show a default poll created with v0.3.0', async function (assert) {
|
|
||||||
const encryptionKey = '5MKFuNTKILUXw6RuqkAw6ooZw4k3mWWx98ZQw8vH';
|
|
||||||
|
|
||||||
let poll = this.server.create('poll', {
|
|
||||||
encryptionKey,
|
|
||||||
answerType: 'YesNoMaybe',
|
|
||||||
// property 'id' of answers has been renamed to 'type' in v0.4.0
|
|
||||||
answers: [
|
|
||||||
{
|
|
||||||
id: 'yes',
|
|
||||||
labelTranslation: 'answerTypes.yes.label',
|
|
||||||
icon: 'glyphicon glyphicon-thumbs-up',
|
|
||||||
label: 'Ja',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'maybe',
|
|
||||||
labelTranslation: 'answerTypes.maybe.label',
|
|
||||||
icon: 'glyphicon glyphicon-hand-right',
|
|
||||||
label: 'Vielleicht',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'no',
|
|
||||||
labelTranslation: 'answerTypes.no.label',
|
|
||||||
icon: 'glyphicon glyphicon-thumbs-down',
|
|
||||||
label: 'Nein',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
options: [
|
|
||||||
{ title: new Date('2015-12-24T17:00').toISOString() },
|
|
||||||
{ title: new Date('2015-12-24T19:00').toISOString() },
|
|
||||||
{ title: new Date('2015-12-31T22:59').toISOString() },
|
|
||||||
],
|
|
||||||
users: [
|
|
||||||
this.server.create('user', {
|
|
||||||
encryptionKey,
|
|
||||||
name: 'Fritz Bauer',
|
|
||||||
// selections.value was renamed to selections.label
|
|
||||||
// selections.id was renamed to selections.type
|
|
||||||
selections: [
|
|
||||||
{
|
|
||||||
value: {
|
|
||||||
id: 'yes',
|
|
||||||
labelTranslation: 'answerTypes.yes.label',
|
|
||||||
icon: 'glyphicon glyphicon-thumbs-up',
|
|
||||||
label: 'Ja',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: {
|
|
||||||
id: 'no',
|
|
||||||
labelTranslation: 'answerTypes.no.label',
|
|
||||||
icon: 'glyphicon glyphicon-thumbs-down',
|
|
||||||
label: 'Nein',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: {
|
|
||||||
id: 'no',
|
|
||||||
labelTranslation: 'answerTypes.no.label',
|
|
||||||
icon: 'glyphicon glyphicon-thumbs-down',
|
|
||||||
label: 'Nein',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
// version tag had have wrong format
|
|
||||||
version: 'v0.3-0',
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
// version tag had have wrong format
|
|
||||||
version: 'v0.3-0',
|
|
||||||
});
|
|
||||||
|
|
||||||
await visit(`/poll/${poll.id}?encryptionKey=${encryptionKey}`);
|
|
||||||
assert.equal(currentRouteName(), 'poll.participation');
|
|
||||||
assert.deepEqual(
|
|
||||||
findAll(
|
|
||||||
`[data-test-form-element^="option"] label:not(.custom-control-label)`,
|
|
||||||
).map((el) => el.textContent.trim()),
|
|
||||||
[
|
|
||||||
Intl.DateTimeFormat('en-US', {
|
|
||||||
dateStyle: 'full',
|
|
||||||
timeStyle: 'short',
|
|
||||||
}).format(new Date('2015-12-24T17:00')),
|
|
||||||
Intl.DateTimeFormat('en-US', { timeStyle: 'short' }).format(
|
|
||||||
new Date('2015-12-24T19:00'),
|
|
||||||
),
|
|
||||||
Intl.DateTimeFormat('en-US', {
|
|
||||||
dateStyle: 'full',
|
|
||||||
timeStyle: 'short',
|
|
||||||
}).format(new Date('2015-12-31T22:59')),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
assert.deepEqual(
|
|
||||||
Array.from(
|
|
||||||
find('[data-test-form-element^="option"]').querySelectorAll(
|
|
||||||
'.radio label',
|
|
||||||
),
|
|
||||||
).map((el) => el.textContent.trim()),
|
|
||||||
[yesLabel, maybeLabel, noLabel],
|
|
||||||
);
|
|
||||||
|
|
||||||
await switchTab('evaluation');
|
|
||||||
assert.equal(currentRouteName(), 'poll.evaluation');
|
|
||||||
|
|
||||||
let participant = PollEvaluationPage.participants.filterBy(
|
|
||||||
'name',
|
|
||||||
'Fritz Bauer',
|
|
||||||
)[0];
|
|
||||||
assert.ok(participant, 'user exists in participants table');
|
|
||||||
assert.deepEqual(
|
|
||||||
participant.selections.map((_) => _.answer),
|
|
||||||
[yesLabel, noLabel, noLabel],
|
|
||||||
'participants table shows correct answers for new participant',
|
|
||||||
);
|
|
||||||
|
|
||||||
await switchTab('participation');
|
|
||||||
assert.equal(currentRouteName(), 'poll.participation');
|
|
||||||
|
|
||||||
await pollParticipate('Hermann Langbein', ['yes', 'maybe', 'yes']);
|
|
||||||
assert.equal(currentRouteName(), 'poll.evaluation');
|
|
||||||
|
|
||||||
participant = PollEvaluationPage.participants.filterBy(
|
|
||||||
'name',
|
|
||||||
'Hermann Langbein',
|
|
||||||
)[0];
|
|
||||||
assert.ok(participant, 'user exists in participants table');
|
|
||||||
assert.deepEqual(
|
|
||||||
participant.selections.map((_) => _.answer),
|
|
||||||
[yesLabel, maybeLabel, yesLabel],
|
|
||||||
'participants table shows correct answers for new participant',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('show a poll using free text created with v0.3.0', async function (assert) {
|
|
||||||
let encryptionKey = 'Rre6dAGOYLW9gYKOP4LhX7Qwfhe5Th3je0uKDtyy';
|
|
||||||
let poll = this.server.create('poll', {
|
|
||||||
encryptionKey,
|
|
||||||
answerType: 'FreeText',
|
|
||||||
answers: [],
|
|
||||||
options: [
|
|
||||||
{ title: 'apple pie' },
|
|
||||||
{ title: 'pecan pie' },
|
|
||||||
{ title: 'plum pie' },
|
|
||||||
],
|
|
||||||
pollType: 'MakeAPoll',
|
|
||||||
users: [
|
|
||||||
this.server.create('user', {
|
|
||||||
encryptionKey,
|
|
||||||
name: 'Paul Levi',
|
|
||||||
// selections.value was renamed to selections.label
|
|
||||||
// selections.id was renamed to selections.type
|
|
||||||
selections: [
|
|
||||||
{ value: 'would be great!' },
|
|
||||||
{ value: 'no way' },
|
|
||||||
{ value: 'if I had to' },
|
|
||||||
],
|
|
||||||
// version tag had have wrong format
|
|
||||||
version: 'v0.3-0',
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
// version tag had have wrong format
|
|
||||||
version: 'v0.3-0',
|
|
||||||
});
|
|
||||||
|
|
||||||
await visit(`/poll/${poll.id}?encryptionKey=${encryptionKey}`);
|
|
||||||
assert.equal(currentRouteName(), 'poll.participation');
|
|
||||||
assert.deepEqual(
|
|
||||||
findAll(
|
|
||||||
`[data-test-form-element^="option"] label:not(.custom-control-label)`,
|
|
||||||
).map((el) => el.textContent.trim()),
|
|
||||||
['apple pie', 'pecan pie', 'plum pie'],
|
|
||||||
);
|
|
||||||
|
|
||||||
await switchTab('evaluation');
|
|
||||||
assert.equal(currentRouteName(), 'poll.evaluation');
|
|
||||||
|
|
||||||
let participant = PollEvaluationPage.participants.filterBy(
|
|
||||||
'name',
|
|
||||||
'Paul Levi',
|
|
||||||
)[0];
|
|
||||||
assert.ok(participant, 'user exists in participants table');
|
|
||||||
assert.deepEqual(
|
|
||||||
participant.selections.map((_) => _.answer),
|
|
||||||
['would be great!', 'no way', 'if I had to'],
|
|
||||||
'participants table shows correct answers for new participant',
|
|
||||||
);
|
|
||||||
|
|
||||||
await switchTab('participation');
|
|
||||||
assert.equal(currentRouteName(), 'poll.participation');
|
|
||||||
|
|
||||||
await pollParticipate('Hermann Langbein', [
|
|
||||||
"I don't care",
|
|
||||||
'would be awesome',
|
|
||||||
"can't imagine anything better",
|
|
||||||
]);
|
|
||||||
assert.equal(currentRouteName(), 'poll.evaluation');
|
|
||||||
|
|
||||||
participant = PollEvaluationPage.participants.filterBy(
|
|
||||||
'name',
|
|
||||||
'Hermann Langbein',
|
|
||||||
)[0];
|
|
||||||
assert.ok(participant, 'user exists in participants table');
|
|
||||||
assert.deepEqual(
|
|
||||||
participant.selections.map((_) => _.answer),
|
|
||||||
["I don't care", 'would be awesome', "can't imagine anything better"],
|
|
||||||
'participants table shows correct answers for new participant',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
Loading…
Reference in a new issue