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