Segunda Entrega

Na segunda parte do projeto devem desenvolver a camada de apresentação no lado do cliente assim como implementar testes end-to-end (e2e) do ponto de vista do utilizador. Necessitarão, eventualmente, de acrescentar alguns serviços do lado do servidor assim como estender a informação enviada por alguns DTOs. Cada subgrupo continua a trabalhar na sua funcionalidade.


Antes de iniciarem a resolução da segunda parte devem colocar no master o código fornecido pelo corpo docente no ramo master de https://gitlab.rnl.tecnico.ulisboa.pt/es/humanaethica. Para isso devem ser dados os seguintes comandos.


Um aluno do grupo faz os seguintes passos no repositório do projeto na sua máquina (e apenas um aluno!):

1 - Criar um remote para o repositório dos docentes

git remote add docentes git@gitlab.rnl.tecnico.ulisboa.pt:es/humanaethica.git

2 - Verificar que há um novo remote, docentes

git remote -v

3 - Colocar o novo código em master remoto

git fetch docentes
git checkout sprint-1
git branch -D master
git checkout -b master docentes/master
git push --set-upstream origin master --force


Cada aluno do grupo faz no repositório do projeto na sua máquina (excluindo o aluno anterior):


1 - Apaga master local

git checkout sprint-1
git branch -D master

2 - Faz fetch do novo master

git fetch
git checkout master


Nota: O desenvolvimento da segunda parte deve ser efetuado sobre novos ramos criados a partir do master, os antigos ramos não vão conter o novo código.

1 - Concorrer a Actividade

Interface Utilizador

O objectivo é implementar a interface descrita neste vídeo (https://youtu.be/VA3e9I8z-J8). O desenvolvimento assume que a base de dados está com os dados contidos no ficheiro data/database-initialization/hedb-create-enrollments.sql.


A estratégia de implementação incluirá (ainda que não exaustivamente) os seguintes passos:

  • Criar um botão Apply for Activity em VolunteerActivitiesView

  • Garantir que o botão apenas está ativo quando se verificam as condições:

    • Ainda está aberto o período de concurso da atividade

    • O voluntário ainda não concorreu à atividade

  • Para verificar as condições acima pode ser necessário implementar o seguinte serviço web:

    • public List<EnrollmentDto> getVolunteerEnrollments(Principal principal), garantindo que apenas pode ser invocado pelo voluntário. Não é necessário escrever código de testes e sugere-se implementar uma query no repositório.

  • Implementar um EnrollmentDialog que:

    • Possui um único campo de entrada motivation;

    • Informa o utilizador se não preenche os dados;

    • O botão de criar apenas fica ativo se este campo possuir pelo menos 10 caracteres.

  • Garantir que quando é criado o enrollment este é enviado num evento a VolunteerActivitiesView que o guarda na sua lista de enrollments.

  • Acrescentar o atributo numberOfEnrollments a ActivityDto

  • Acrescentar uma coluna Applications na tabela em InstitutionActivitiesView que contém o número de enrollments na atividade.

Testes end-to-end (e2e)

Devem implementar um teste end-to-end que simula o comportamento mostrado no vídeo com as seguintes verificações:

  • Como membro

    • Verificar que a tabela de atividades tem 3 instâncias

    • Verificar que a primeira atividade da tabela tem 0 Applications

  • Como voluntário

    • Concorrer à primeira atividade

  • Como membro

    • Verificar que a primeira atividade da tabela tem 1 Applications

    • Selecionar Show Enrollments da primeira atividade da tabela

    • Verificar que a tabela de enrollments da atividade tem 1 enrollment com a motivação introduzida

Devem criar uma função cypress que carrega a base de dados com os mesmo dados que em data/database-initialization/hedb-create-enrollments.sql.

2 - Selecionar Participantes

Interface Utilizador

O objectivo é implementar a interface descrita neste vídeo (https://youtu.be/wIE6E2gcOsY). O desenvolvimento assume que a base de dados está com os dados contidos no ficheiro data/database-initialization/hedb-create-participations.sql.


A estratégia de implementação incluirá (ainda que não exaustivamente) os seguintes passos:

  • Na classe InstitutionActivityEnrollmentsView que mostra uma tabela das candidaturas a uma atividade adicionar uma coluna VolunteerName, que indica o nome do participante, e Participating, que indica se o candidato participa na atividade. Para isto pode necessitar de alterar EnrollmentDto.

  • Adicionar à tabela uma coluna Actions, que para cada linha possui um botão Select Participant 

  • Garantir que o botão apenas está ativo quando se verificam as condições:

    • O voluntário não é participante na actividade

    • O número de participantes na atividade é menor do que o limite de participações

  • Implementar um ParticipationSelectionDialog que:

    • Possui um único campo de entrada rating;

    • Pode ser submetido a vazio, mas se tiver algum dado deve ser um número inteiro entre 1 e 5;

  • Garantir que quando é criado o participation este é enviado num evento a InstitutionActivityEnrollmentsView que atualiza a sua lista de enrollments

  • Acrescentar o atributo numberOfParticipations a ActivityDto

  • Adicionar uma coluna à tabela em InstitutionActivityView que indica para cada atividade o número de participações.

Testes end-to-end (e2e)

Devem implementar um teste end-to-end que simula o comportamento mostrado no vídeo com as seguintes verificações:

  • Como membro

    • Verificar que a tabela de atividades tem 2 instâncias

    • Verificar que a primeira atividade da tabela tem 1 participação

    • Selecionar Show Enrollments da primeira atividade da tabela

    • Verificar que a tabela dos enrollments da atividade tem 2 instâncias

    • Verificar que o primeiro enrollment da tabela tem a coluna Participating como false

    • Criar uma participação para esse enrollment

    • Verificar que o primeiro enrollment que passou a ter participação tem a coluna Participating como true

    • Voltar à tabela de atividades e verificar que a atividade passou a ter 2 participações

Devem criar uma função cypress que carrega a base de dados com os mesmo dados que data/database-initialization/hedb-create-participations.sql.

3 - Avaliar Instituição

Interface Utilizador

O objectivo é implementar a interface descrita neste vídeo (https://youtu.be/zeR3ROIKXos). O desenvolvimento assume que a base de dados está com os dados contidos no ficheiro data/database-initialization/hedb-create-assessments.sql.


A estratégia de implementação incluirá (ainda que não exaustivamente) os seguintes passos:

  • Criar um botão WriteAssessment em VolunteerActivitiesView

  • Garantir que o botão apenas está ativo quando se verificam as condições:

    • A atividade já terminou

    • O voluntário ainda não fez uma avaliação desta instituição

    • O voluntário tem uma participação na atividade

  • Para verificar as condições acima pode ser necessário implementar os seguintes serviço web:

    • public List<ParticipationDto> getVolunteerParticipations(Principal principal), garantindo que apenas pode ser invocado pelo voluntário. Não é necessário escrever código de testes e sugere-se implementar uma query no repositório.

    • public List<AssessmentDto> getVolunteerAssessments(Principal principal), garantindo que apenas pode ser invocado pelo voluntário. Não é necessário escrever código de testes e sugere-se implementar uma query no repositório.

  • Implementar um AssessmentDialog que:

    • Possui um único campo de entrada review;

    • Informa o utilizador se não preenche os dados;

    • O botão de criar apenas fica ativo se este campo possuir pelo menos 10 caracteres.

  • Garantir que quando é criado o assessment este é enviado num evento a VolunteerActivitiesView que o guarda na sua lista de assessments.

  • Acrescentar o atributo volunteerName a AssessmentDto

  • Na classe InstitutionAssessmentsView adicionar à tabela de avaliações da instituição, VolunteerName.

Testes end-to-end (e2e)

Devem implementar um teste end-to-end que simula o comportamento mostrado no vídeo com as seguintes verificações:

  • Como voluntário

    • Verificar que a tabela de atividades tem 6 instâncias

    • Verificar que a primeira atividade da tabela tem o nome A1

    • Avaliar a primeira atividade

  • Como membro

    • Verificar que a tabela de avaliações tem uma única avaliação

    • Verificar que a avaliação tem o texto inserido pelo voluntário 

Devem criar uma função cypress que carrega a base de dados com os mesmo dados que em data/database-initialization/hedb-create-assessments.sql.


Critérios de Avaliação


Informação adicional

Cada grupo trabalha no seu repositório privado que deveria ser actualizado da forma indicada acima. A carga de trabalho (quantidade e complexidade das tarefas) deve ser dividida de forma semelhante entre os membros de cada subgrupo. Isto será verificado pelos commits. A nota 0 (zero) será atribuída a alunos que não apresentem commits. (Ver secção Grupos e Ramos para mais informação.)

O board do primeiro sprint pode ser reutilizado.


Para o critério "Markdown file with submission summary", basta preencher o template P2.md e colocá-lo numa pasta com nome "markdown". Link para template: https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/3. Versão "raw": https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/3/raw/master/P2.md