Skip to content

Commit

Permalink
feat(admin): add CGU template and component
Browse files Browse the repository at this point in the history
  • Loading branch information
EmmanuelleBonnemay committed Dec 5, 2024
1 parent faa10a4 commit 82b469f
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 0 deletions.
58 changes: 58 additions & 0 deletions admin/app/components/users/cgu.gjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { service } from '@ember/service';
import Component from '@glimmer/component';
import dayjs from 'dayjs';
import { t } from 'ember-intl';

export default class Cgu extends Component {
@service accessControl;
@service intl;

get userHasValidatePixAppTermsOfService() {
return this._formatValidatedTermsOfServiceText(this.args.lastTermsOfServiceValidatedAt, this.args.cgu);
}

get userHasValidatePixOrgaTermsOfService() {
return this._formatValidatedTermsOfServiceText(
this.args.lastPixOrgaTermsOfServiceValidatedAt,
this.args.pixOrgaTermsOfServiceAccepted,
);
}

get userHasValidatePixCertifTermsOfService() {
return this._formatValidatedTermsOfServiceText(
this.args.lastPixCertifTermsOfServiceValidatedAt,
this.args.pixCertifTermsOfServiceAccepted,
);
}
_formatValidatedTermsOfServiceText(date, hasValidatedTermsOfService) {
if (!hasValidatedTermsOfService) {
return this.intl.t('components.users.user-detail-personal-information.cgu.validation.status.non-validated');
}

return date
? this.intl.t('components.users.user-detail-personal-information.cgu.validation.status.validated-with-date', {
formattedDate: dayjs(date).format('DD/MM/YYYY'),
})
: this.intl.t('components.users.user-detail-personal-information.cgu.validation.status.validated');
}

<template>
<header class="page-section__header">
<h2 class="page-section__title">CGU</h2>
</header>

<ul class="cgu__cgu-list">
<li class="cgu__cgu-information">
{{t "components.users.user-detail-personal-information.cgu.validation.domain.pix-app"}}
{{this.userHasValidatePixAppTermsOfService}}</li>

<li class="cgu__cgu-information">
{{t "components.users.user-detail-personal-information.cgu.validation.domain.pix-orga"}}
{{this.userHasValidatePixOrgaTermsOfService}}</li>

<li class="cgu__cgu-information">
{{t "components.users.user-detail-personal-information.cgu.validation.domain.pix-certif"}}
{{this.userHasValidatePixCertifTermsOfService}}</li>
</ul>
</template>
}
10 changes: 10 additions & 0 deletions admin/app/templates/authenticated/users/get/cgu.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<section class="page-section">
<Users::Cgu
@cgu={{@model.cgu}}
@pixOrgaTermsOfServiceAccepted={{@model.pixOrgaTermsOfServiceAccepted}}
@pixCertifTermsOfServiceAccepted={{@model.pixCertifTermsOfServiceAccepted}}
@lastTermsOfServiceValidatedAt={{@model.lastTermsOfServiceValidatedAt}}
@lastPixOrgaTermsOfServiceValidatedAt={{@model.lastPixOrgaTermsOfServiceValidatedAt}}
@lastPixCertifTermsOfServiceValidatedAt={{@model.lastPixCertifTermsOfServiceValidatedAt}}
/>
</section>
67 changes: 67 additions & 0 deletions admin/tests/integration/components/users/cgu-test.gjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { render } from '@1024pix/ember-testing-library';
import Service from '@ember/service';
import { setupRenderingTest } from 'ember-qunit';
import Cgu from 'pix-admin/components/users/cgu';
import { module, test } from 'qunit';

import setupIntl from '../../../helpers/setup-intl';

module('Integration | Component | cgu', function (hooks) {
setupRenderingTest(hooks);
setupIntl(hooks);

class AccessControlStub extends Service {
hasAccessToUsersActionsScope = true;
}

hooks.beforeEach(function () {
this.intl = this.owner.lookup('service:intl');
this.owner.register('service:access-control', AccessControlStub);
});

test('displays correct Terms of Service status for Pix App, Pix Orga and Pix Certif', async function (assert) {
//Given

const cgu = true;
const lastTermsOfServiceValidatedAt = new Date('2021-12-10');
const pixOrgaTermsOfServiceAccepted = true;
const lastPixOrgaTermsOfServiceValidatedAt = null;
const pixCertifTermsOfServiceAccepted = false;
const lastPixCertifTermsOfServiceValidatedAt = null;

const appDomain = this.intl.t('components.users.user-detail-personal-information.cgu.validation.domain.pix-app');
const validatedWithDate = this.intl.t(
'components.users.user-detail-personal-information.cgu.validation.status.validated-with-date',
{ formattedDate: '10/12/2021' },
);

const orgaDomain = this.intl.t('components.users.user-detail-personal-information.cgu.validation.domain.pix-orga');
const validated = this.intl.t('components.users.user-detail-personal-information.cgu.validation.status.validated');

const certifDomain = this.intl.t(
'components.users.user-detail-personal-information.cgu.validation.domain.pix-certif',
);
const nonValidated = this.intl.t(
'components.users.user-detail-personal-information.cgu.validation.status.non-validated',
);

//When
const screen = await render(
<template>
<Cgu
@lastTermsOfServiceValidatedAt={{lastTermsOfServiceValidatedAt}}
@cgu={{cgu}}
@lastPixOrgaTermsOfServiceValidatedAt={{lastPixOrgaTermsOfServiceValidatedAt}}
@pixOrgaTermsOfServiceAccepted={{pixOrgaTermsOfServiceAccepted}}
@lastPixCertifTermsOfServiceValidatedAt={{lastPixCertifTermsOfServiceValidatedAt}}
@pixCertifTermsOfServiceAccepted={{pixCertifTermsOfServiceAccepted}}
/>
</template>,
);

//Then
assert.dom(screen.queryByText(`${appDomain} ${validatedWithDate}`)).exists();
assert.dom(screen.queryByText(`${orgaDomain} ${validated}`)).exists();
assert.dom(screen.queryByText(`${certifDomain} ${nonValidated}`)).exists();
});
});

0 comments on commit 82b469f

Please sign in to comment.