design-comuni-plone-theme
Version:
Volto Theme for Italia design guidelines
604 lines (585 loc) • 18.7 kB
JSX
import React from 'react';
import { render, screen } from '@testing-library/react';
import '@testing-library/jest-dom/extend-expect';
import IncaricoView from '../IncaricoView/IncaricoView';
import configureStore from 'redux-mock-store';
import { Provider } from 'react-intl-redux';
import { MemoryRouter } from 'react-router-dom';
import thunk from 'redux-thunk';
const middlewares = [thunk];
const mockStore = configureStore(middlewares);
// Warning: An update to Icon inside a test was not wrapped in act(...).
// When testing, code that causes React state updates should be wrapped into act(...):
jest.mock('design-comuni-plone-theme/components/ItaliaTheme/Icons/Icon');
jest.mock('@plone/volto/helpers/Loadable/Loadable');
beforeAll(
async () =>
await require('@plone/volto/helpers/Loadable/Loadable').__setLoadables(),
);
const mock_mandatory = {
'@components': {
actions: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@actions',
},
aliases: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@aliases',
},
breadcrumbs: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@breadcrumbs',
},
contextnavigation: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@contextnavigation',
},
navigation: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@navigation',
},
subsite: {},
translations: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@translations',
},
types: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@types',
},
workflow: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/@workflow',
},
},
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi',
'@type': 'Incarico',
UID: 'd66401e19ea94b65825b3b03633c0f63',
data_inizio_incarico: '2023-02-19',
items: [],
tipologia_incarico: {
title: 'Politico',
token: 'politico',
},
title: 'Incarico di Gabriele Bianchi',
};
const mock_allfields = {
...mock_mandatory,
allow_discussion: false,
atto_nomina: [
{
'@id': 'http://localhost:3000/documenti-e-dati/is-this-the-real-life',
'@type': 'Documento',
business_events: [
{
title: 'Avvio impresa',
token: 'avvio_impresa',
},
],
description: 'Is this just fantasy?',
design_italia_meta_type: 'Documento',
effective: '2023-02-17T13:45:57+00:00',
has_children: true,
id: 'is-this-the-real-life',
image_field: null,
image_scales: null,
person_life_events: [
{
title: 'Iscrizione Scuola/Università e/o richiesta borsa di studio',
token: 'iscrizione_scuola_universita_richiesta_borsa_di_studio',
},
],
review_state: 'published',
tipologia_documenti_albopretorio: {
title: 'Atto amministrativo␟Decreto␟Decreto del Sindaco',
token: 'decreto_del_sindaco',
},
tipologia_documento: [
{
title: 'Documenti albo pretorio',
token: 'documenti_albo_pretorio',
},
],
tipologia_licenze: {
title: 'Licenza aperta',
token: 'licenza_aperta',
},
title: 'Is this the real life?',
},
],
changeNote: '',
compensi: {
blocks: {
'f943ce1c-cc67-4568-8526-1281f01a9202': {
'@type': 'slate',
plaintext: "You don't ever say too much",
value: [
{
children: [
{
text: "You don't ever say too much",
},
],
type: 'p',
},
],
},
},
blocks_layout: {
items: ['f943ce1c-cc67-4568-8526-1281f01a9202'],
},
},
contributors: [],
created: '2023-01-19T12:04:41+00:00',
creators: ['admin'],
data_conclusione_incarico: '2023-03-31',
data_insediamento: '2023-03-28',
description: 'Staring at the ceiling with you',
design_italia_meta_type: 'Incarico',
effective: null,
exclude_from_nav: false,
expires: null,
id: 'incarico-di-gabriele-bianchi',
importi_viaggio_servizio: {
blocks: {
'2d2dd70c-3af5-4ff8-816b-46b34ea186b7': {
'@type': 'slate',
plaintext: "You don't really read into",
value: [
{
children: [
{
text: "You don't really read into",
},
],
type: 'p',
},
],
},
},
blocks_layout: {
items: ['2d2dd70c-3af5-4ff8-816b-46b34ea186b7'],
},
},
is_folderish: true,
items: [
{
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/compensi-file',
'@type': 'Document',
description: '',
design_italia_meta_type: 'Pagina',
has_children: false,
id: 'compensi-file',
image_field: '',
image_scales: null,
review_state: 'private',
title: 'Compensi',
},
{
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi/incarico-di-gabriele-bianchi/importi-di-viaggio-e-o-servizi',
'@type': 'Document',
description: '',
design_italia_meta_type: 'Pagina',
has_children: false,
id: 'importi-di-viaggio-e-o-servizi',
image_field: '',
image_scales: null,
review_state: 'private',
title: 'Importi di viaggio e/o servizi',
},
],
items_total: 2,
language: '',
layout: 'view',
lock: {
locked: false,
stealable: true,
},
modified: '2023-03-14T16:30:25+00:00',
next_item: {},
opengraph_description: null,
opengraph_image: null,
opengraph_title: null,
parent: {
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/incarichi',
'@type': 'Document',
description: '',
design_italia_meta_type: 'Pagina',
has_children: true,
id: 'incarichi',
image_field: null,
image_scales: null,
review_state: 'private',
title: 'Incarichi',
},
persona: [
{
'@id':
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi',
'@type': 'Persona',
description: 'Assessore allo sport',
design_italia_meta_type: 'Persona pubblica',
effective: null,
has_children: true,
id: 'gabriele-bianchi',
image_field: 'foto_persona',
image_scales: {
foto_persona: [
{
'content-type': 'image/jpeg',
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-5184-a0948b7d7c2e6ec2944ea4915f5d0c4f.jpeg',
filename: 'national-cancer-institute.jpeg',
height: 3456,
scales: {
gallery: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-250-d009f9ee6746d6ada973aeb0e99437eb.jpeg',
height: 166,
width: 250,
},
great: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-1200-db22dc3240b650dc494ea6412e5c4e8c.jpeg',
height: 800,
width: 1200,
},
huge: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-1600-1a281d1182b9422a0211cb7cc5e156f2.jpeg',
height: 1066,
width: 1600,
},
icon: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-32-92c4797637f83c00ac27cba86b37cff5.jpeg',
height: 21,
width: 32,
},
large: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-800-d85755d485e32d0a1deba313de75711b.jpeg',
height: 533,
width: 800,
},
larger: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-1000-e88f96e2a0ed91917f9d728caf2d4406.jpeg',
height: 666,
width: 1000,
},
listing: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-16-37154ce0fea872870103d5fae1a29f61.jpeg',
height: 10,
width: 16,
},
midi: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-300-458fd003c0d1576f66035dbc1e8ab87e.jpeg',
height: 200,
width: 300,
},
mini: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-200-830b17e7b02da4853b079bc80c1c4e34.jpeg',
height: 133,
width: 200,
},
preview: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-400-f9e5f2efc8120f6e3351536b3f287196.jpeg',
height: 266,
width: 400,
},
teaser: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-600-001ddce8166a4c8bb2839212f9fb2430.jpeg',
height: 400,
width: 600,
},
thumb: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-128-d97983d9975606ed88ec6d2029e10ea9.jpeg',
height: 85,
width: 128,
},
tile: {
download:
'http://localhost:3000/amministrazione/personale-amministrativo/gabriele-bianchi/@@images/foto_persona-64-f7765a9f78ff6e0725ebee3534a782c8.jpeg',
height: 42,
width: 64,
},
},
size: 2026538,
width: 5184,
},
],
},
incarichi: 'Incarico di Gabriele Bianchi',
review_state: 'private',
title: 'Gabriele Bianchi',
},
],
previous_item: {},
relatedItems: [],
responsabile_struttura: [
{
'@id':
'http://localhost:3000/amministrazione/uffici/ufficio-delle-attivita-produttive-1',
'@type': 'UnitaOrganizzativa',
address: '',
circoscrizione: '',
city: '',
contact_info: [
{
'@id':
'http://localhost:3000/amministrazione/uffici/ufficio-delle-attivita-produttive',
'@type': 'PuntoDiContatto',
description: '',
design_italia_meta_type: 'Punto di Contatto',
has_children: false,
id: 'ufficio-delle-attivita-produttive',
image_field: null,
image_scales: null,
review_state: 'private',
title: 'Ufficio delle Attività Produttive',
value_punto_contatto: [
{
pdc_type: 'email',
pdc_value: 'produttive@comune.cagliari.it',
},
{
pdc_type: 'fax',
pdc_value: '+393333333333',
},
{
pdc_type: 'url',
pdc_value: 'www.festadisantelfisio.com',
},
{
pdc_type: 'pec',
pdc_value: 'contatto@pec.it',
},
{
pdc_type: 'account',
pdc_value: 'Account',
},
{
pdc_type: 'whatsapp',
pdc_value: 'Whatsapp',
},
{
pdc_type: 'telegram',
pdc_value: 'Telegram',
},
{
pdc_type: 'skype',
pdc_value: 'Skype',
},
{
pdc_type: 'linkedin',
pdc_value: 'LinkedIn',
},
{
pdc_type: 'twitter',
pdc_value: 'Twitter',
},
{
pdc_type: 'telefono',
pdc_value: '+39 070 6776430',
},
],
},
],
description: 'Prova',
design_italia_meta_type: 'Unita Organizzativa',
effective: '2023-02-20T16:12:24+00:00',
geolocation: {
latitude: 0,
longitude: 0,
},
has_children: true,
id: 'ufficio-delle-attivita-produttive-1',
image_field: null,
image_scales: null,
nome_sede: '',
quartiere: '',
review_state: 'published',
street: '',
tipologia_organizzazione: {
title: 'Struttura amministrativa␟Ufficio',
token: 'ufficio',
},
title: 'Ufficio delle Attività Produttive',
zip_code: '',
},
],
review_state: 'private',
rights: '',
seo_canonical_url: null,
seo_description: null,
seo_noindex: null,
seo_title: null,
subjects: [],
ulteriori_informazioni: {
blocks: {},
blocks_layout: {
items: [],
},
},
unita_organizzativa: [
{
'@id': 'http://localhost:3000/amministrazione/uffici/giunta-e-consiglio',
'@type': 'UnitaOrganizzativa',
address: '',
circoscrizione: '',
city: '',
contact_info: [
{
'@id':
'http://localhost:3000/amministrazione/punti-di-contatto/is-this-the-real-life',
'@type': 'PuntoDiContatto',
description: 'Is this just fantasy',
design_italia_meta_type: 'Punto di Contatto',
has_children: false,
id: 'is-this-the-real-life',
image_field: null,
image_scales: null,
review_state: 'private',
title: 'Is this the real life',
value_punto_contatto: [
{
pdc_type: 'email',
pdc_value: 'freddymercury@gmail.com',
},
],
},
],
description: 'Pierced through the heart but never killed',
design_italia_meta_type: 'Unita Organizzativa',
effective: null,
geolocation: {
latitude: 0,
longitude: 0,
},
has_children: true,
id: 'giunta-e-consiglio',
image_field: null,
image_scales: null,
nome_sede: '',
quartiere: '',
review_state: 'private',
street: '',
tipologia_organizzazione: {
title: 'Struttura amministrativa',
token: 'struttura_amministrativa',
},
title: 'Giunta e consiglio',
zip_code: '',
},
],
version: 'current',
versioning_enabled: true,
working_copy: null,
working_copy_of: null,
};
const store = mockStore({
intl: {
locale: 'en',
messages: {},
},
content: {
subrequests: {},
},
search: {
error: null,
items: [],
total: 0,
loaded: false,
loading: false,
batching: {},
subrequests: {},
},
});
test('renders all mandatory fields in the page', async () => {
render(
<Provider store={store}>
<MemoryRouter>
<IncaricoView content={mock_mandatory} />
</MemoryRouter>
</Provider>,
);
//title
expect(
screen.getByRole('heading', { name: /Incarico di Gabriele Bianchi/i }),
).toBeInTheDocument();
// data inizio incarico --> non appare
// expect(screen.getByText('2023-02-19')).toBeInTheDocument();
// tipologia incarico
expect(
screen.getByRole('heading', { name: /Tipo di incarico/i }),
).toBeInTheDocument();
expect(screen.getByText(/Politico/i)).toBeInTheDocument();
});
test('renders all non-mandatory fields in the page', async () => {
render(
<Provider store={store}>
<MemoryRouter>
<IncaricoView content={mock_allfields} />
</MemoryRouter>
</Provider>,
);
//descrizione
expect(
screen.getByText(/Staring at the ceiling with you/i),
).toBeInTheDocument();
//persona che ha carica e incarico
expect(screen.getByRole('heading', { name: /Persona/i })).toBeInTheDocument();
expect(
screen.getByRole('link', { name: /Gabriele Bianchi/i }),
).toBeInTheDocument();
// unità organizzativa
expect(
screen.getByRole('heading', { name: /Unita organizzativa/i }),
).toBeInTheDocument();
expect(
screen.getByRole('link', {
name: /Giunta e consiglio/i,
}),
);
//responsabile struttura
expect(
screen.getByRole('heading', { name: /Responsabile/i }),
).toBeInTheDocument();
expect(
screen.getByRole('link', {
name: /Ufficio delle attività produttive/i,
}),
).toBeInTheDocument();
//compensi
expect(
screen.getByRole('heading', { name: /Compensi/i }),
).toBeInTheDocument();
expect(screen.getByText(/You don't ever say too much/i)).toBeInTheDocument();
// importi di viaggio e di servizio
expect(
screen.getByRole('heading', { name: 'Importi di viaggio e/o servizio' }),
).toBeInTheDocument();
expect(screen.getByText(/You don't really read into/i)).toBeInTheDocument();
// data inizio incarico --> non appare
// expect(screen.getByText('31/03/2023')).toBeInTheDocument();
// data insediamento --> non appare
// expect(screen.getByText('31/01/2023')).toBeInTheDocument();
// Atto di nomina
expect(
screen.getByRole('heading', { name: 'Atto di nomina' }),
).toBeInTheDocument();
expect(
screen.getByRole('link', { name: 'Is this the real life?' }),
).toBeInTheDocument();
});