diff --git a/.github/workflows/gradle-build-development.yml b/.github/workflows/gradle-build-development.yml index 88787f557f..4c111d6fb0 100644 --- a/.github/workflows/gradle-build-development.yml +++ b/.github/workflows/gradle-build-development.yml @@ -114,6 +114,7 @@ jobs: --set-env-vars "WEB_ADDRESS=https://checkins-develop-tuvcfzotpq-uc.a.run.app" \ --set-env-vars "FROM_ADDRESS=kimberlinm@objectcomputing.com" \ --set-env-vars "FROM_NAME=Check-Ins - DEVELOP" \ + --set-env-vars "MICRONAUT_ENVIRONMENTS=dev" \ --platform "managed" \ - --max-instances 4 \ + --max-instances 2 \ --allow-unauthenticated diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023..41d9927a4d 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05679dc3c1..aa991fceae 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c81..1b6c787337 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java b/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java index 0733a45497..da2c72eae4 100644 --- a/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java +++ b/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java @@ -8,5 +8,13 @@ public enum Permissions { CAN_DELETE_ORGANIZATION_MEMBERS, CAN_CREATE_ORGANIZATION_MEMBERS, CAN_VIEW_ROLE_PERMISSIONS, - CAN_VIEW_PERMISSIONS + CAN_VIEW_PERMISSIONS, + CAN_VIEW_SKILLS_REPORT, + CAN_VIEW_RETENTION_REPORT, + CAN_VIEW_ANNIVERSARY_REPORT, + CAN_VIEW_BIRTHDAY_REPORT, + CAN_VIEW_PROFILE_REPORT, + CAN_CREATE_CHECKINS, + CAN_VIEW_CHECKINS, + CAN_UPDATE_CHECKINS, } \ No newline at end of file diff --git a/server/src/main/java/com/objectcomputing/checkins/services/action_item/ActionItemController.java b/server/src/main/java/com/objectcomputing/checkins/services/action_item/ActionItemController.java index 0036031809..adf0dcc4cd 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/action_item/ActionItemController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/action_item/ActionItemController.java @@ -10,6 +10,10 @@ import io.micronaut.core.annotation.Nullable; import javax.validation.Valid; + +import com.objectcomputing.checkins.security.permissions.Permissions; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; + import java.net.URI; import java.util.List; import java.util.Set; @@ -32,6 +36,7 @@ public ActionItemController(ActionItemServices actionItemServices) { * @return {@link HttpResponse } */ @Post() + @RequiredPermission(Permissions.CAN_CREATE_CHECKINS) public HttpResponse createActionItem(@Body @Valid ActionItemCreateDTO actionItem, HttpRequest request) { ActionItem newActionItem = actionItemServices.save(new ActionItem(actionItem.getCheckinid(), @@ -49,6 +54,7 @@ public HttpResponse createActionItem(@Body @Valid ActionItemCreateDT * @return {@link HttpResponse< ActionItem >} */ @Put() + @RequiredPermission(Permissions.CAN_UPDATE_CHECKINS) public HttpResponse updateActionItem(@Body @Valid ActionItem actionItem, HttpRequest request) { ActionItem updatedActionItem = actionItemServices.update(actionItem); return HttpResponse @@ -65,6 +71,7 @@ public HttpResponse updateActionItem(@Body @Valid ActionItem actionItem, Http * @param id, id of {@link ActionItem} to delete */ @Delete("/{id}") + @RequiredPermission(Permissions.CAN_UPDATE_CHECKINS) public HttpResponse deleteActionItem(UUID id) { actionItemServices.delete(id); return HttpResponse @@ -78,6 +85,7 @@ public HttpResponse deleteActionItem(UUID id) { * @return {@link ActionItem} */ @Get("/{id}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public ActionItem readActionItem(UUID id) { return actionItemServices.read(id); } @@ -90,6 +98,7 @@ public ActionItem readActionItem(UUID id) { * @return {@link List < CheckIn > list of checkins} */ @Get("/{?checkinid,createdbyid}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public Set findActionItems(@Nullable UUID checkinid, @Nullable UUID createdbyid) { return actionItemServices.findByFields(checkinid, createdbyid); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemController.java b/server/src/main/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemController.java index 38c63df3db..5530f00ab1 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemController.java @@ -1,6 +1,9 @@ package com.objectcomputing.checkins.services.agenda_item; import com.objectcomputing.checkins.exceptions.NotFoundException; +import com.objectcomputing.checkins.security.permissions.Permissions; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; + import io.micronaut.core.annotation.Nullable; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -48,6 +51,7 @@ public AgendaItemController(AgendaItemServices agendaItemServices, * @return {@link HttpResponse } */ @Post("/") + @RequiredPermission(Permissions.CAN_CREATE_CHECKINS) public Mono> createAgendaItem(@Body @Valid AgendaItemCreateDTO agendaItem, HttpRequest request) { return Mono @@ -70,6 +74,7 @@ public Mono> createAgendaItem(@Body @Valid AgendaItemCr * @return {@link HttpResponse< AgendaItem >} */ @Put("/") + @RequiredPermission(Permissions.CAN_UPDATE_CHECKINS) public Mono> updateAgendaItem(@Body @Valid AgendaItem agendaItem, HttpRequest request) { if (agendaItem == null) { return Mono.just(HttpResponse.ok()); @@ -93,6 +98,7 @@ public Mono> updateAgendaItem(@Body @Valid AgendaItem a * @return {@link List list of checkins */ @Get("/{?checkinid,createdbyid}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public Mono>> findAgendaItems(@Nullable UUID checkinid, @Nullable UUID createdbyid) { return Mono.fromCallable(() -> agendaItemServices.findByFields(checkinid, createdbyid)) @@ -109,6 +115,7 @@ public Mono>> findAgendaItems(@Nullable UUID checki * @return {@link AgendaItem} */ @Get("/{id}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public Mono> readAgendaItem(UUID id) { return Mono.fromCallable(() -> agendaItemServices.read(id)) .switchIfEmpty(Mono.error(new NotFoundException("No agennda item for UUID"))) @@ -124,6 +131,7 @@ public Mono> readAgendaItem(UUID id) { * @param id, id of {@link AgendaItem} to delete */ @Delete("/{id}") + @RequiredPermission(Permissions.CAN_UPDATE_CHECKINS) public HttpResponse deleteAgendaItem(UUID id) { agendaItemServices.delete(id); return HttpResponse diff --git a/server/src/main/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteController.java b/server/src/main/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteController.java index 2ef10f9c0a..608b0a1f9e 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteController.java @@ -11,6 +11,10 @@ import io.micronaut.core.annotation.Nullable; import javax.validation.Valid; import javax.validation.constraints.NotNull; + +import com.objectcomputing.checkins.security.permissions.Permissions; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; + import java.net.URI; import java.util.Set; import java.util.UUID; @@ -35,6 +39,7 @@ public CheckinNoteController(CheckinNoteServices checkinNoteServices) { * @return */ @Post() + @RequiredPermission(Permissions.CAN_CREATE_CHECKINS) public HttpResponse createCheckinNote(@Body @Valid CheckinNoteCreateDTO checkinNote, HttpRequest request) { CheckinNote newCheckinNote = checkinNoteServices.save(new CheckinNote(checkinNote.getCheckinid(), checkinNote.getCreatedbyid() , checkinNote.getDescription())); @@ -51,6 +56,7 @@ public HttpResponse createCheckinNote(@Body @Valid CheckinNoteCreat * @return */ @Put() + @RequiredPermission(Permissions.CAN_UPDATE_CHECKINS) public HttpResponse updateCheckinNote(@Body @Valid CheckinNote checkinNote, HttpRequest request) { CheckinNote updateCheckinNote = checkinNoteServices.update(checkinNote); return HttpResponse.ok().headers(headers -> headers.location( @@ -66,6 +72,7 @@ public HttpResponse updateCheckinNote(@Body @Valid CheckinNote chec * @return */ @Get("/{?checkinid,createdbyid}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public Set findCheckinNote(@Nullable UUID checkinid, @Nullable UUID createdbyid) { return checkinNoteServices.findByFields(checkinid, createdbyid); @@ -78,6 +85,7 @@ public Set findCheckinNote(@Nullable UUID checkinid, * @return */ @Get("/{id}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public CheckinNote readCheckinNote(@NotNull UUID id) { return checkinNoteServices.read(id); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/checkins/CheckInController.java b/server/src/main/java/com/objectcomputing/checkins/services/checkins/CheckInController.java index 3195184f10..44e469a694 100755 --- a/server/src/main/java/com/objectcomputing/checkins/services/checkins/CheckInController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/checkins/CheckInController.java @@ -1,6 +1,9 @@ package com.objectcomputing.checkins.services.checkins; import com.objectcomputing.checkins.exceptions.NotFoundException; +import com.objectcomputing.checkins.security.permissions.Permissions; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; + import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; @@ -50,6 +53,7 @@ public CheckInController(CheckInServices checkInServices, * @return */ @Get("/{?teamMemberId,pdlId,completed}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public Mono>> findCheckIns(@Nullable UUID teamMemberId, @Nullable UUID pdlId, @Nullable Boolean completed) { return Mono.fromCallable(() -> checkInServices.findByFields(teamMemberId, pdlId, completed)) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) @@ -65,6 +69,7 @@ public Mono>> findCheckIns(@Nullable UUID teamMemberId */ @Post("/") + @RequiredPermission(Permissions.CAN_CREATE_CHECKINS) public Mono> createCheckIn(@Body @Valid CheckInCreateDTO checkIn, HttpRequest request) { return Mono.fromCallable(() -> checkInServices.save(new CheckIn(checkIn.getTeamMemberId(), checkIn.getPdlId(), checkIn.getCheckInDate(), checkIn.isCompleted()))) @@ -83,6 +88,7 @@ public Mono> createCheckIn(@Body @Valid CheckInCreateDTO c * @return {@link HttpResponse} */ @Put("/") + @RequiredPermission(Permissions.CAN_UPDATE_CHECKINS) public Mono> update(@Body @Valid @NotNull CheckIn checkIn, HttpRequest request) { return Mono.fromCallable(() -> checkInServices.update(checkIn)) @@ -100,6 +106,7 @@ public Mono> update(@Body @Valid @NotNull CheckIn checkIn, * @return */ @Get("/{id}") + @RequiredPermission(Permissions.CAN_VIEW_CHECKINS) public Mono> readCheckIn(@NotNull UUID id) { return Mono.fromCallable(() -> checkInServices.read(id)) .switchIfEmpty(Mono.error(new NotFoundException("No checkin for UUID"))) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/demographics/DemographicsCreateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/demographics/DemographicsCreateDTO.java index b0a51ecabb..c613dcdffd 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/demographics/DemographicsCreateDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/demographics/DemographicsCreateDTO.java @@ -3,7 +3,6 @@ import io.micronaut.core.annotation.Nullable; import io.micronaut.core.annotation.Introspected; import io.swagger.v3.oas.annotations.media.Schema; -import io.micronaut.core.annotation.Nullable; import javax.validation.constraints.NotNull; import java.util.UUID; diff --git a/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportController.java b/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportController.java index c85b326080..ce4c98e01f 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportController.java @@ -1,5 +1,6 @@ package com.objectcomputing.checkins.services.member_skill.skillsreport; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; @@ -18,6 +19,7 @@ import javax.validation.constraints.NotNull; import java.net.URI; import java.util.concurrent.ExecutorService; +import com.objectcomputing.checkins.security.permissions.Permissions; @Controller("/reports/skills") @Secured(SecurityRule.IS_AUTHENTICATED) @@ -44,6 +46,7 @@ public SkillsReportController(SkillsReportServices skillsReportServices, * @return {@link SkillsReportResponseDTO} Returned skills report */ @Post() + @RequiredPermission(Permissions.CAN_VIEW_SKILLS_REPORT) public Mono> reportSkills(@Body @Valid @NotNull SkillsReportRequestDTO requestBody, HttpRequest request) { return Mono.fromCallable(() -> skillsReportServices.report(requestBody)) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileController.java b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileController.java index f93be953e3..44885afc58 100755 --- a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileController.java @@ -1,5 +1,7 @@ package com.objectcomputing.checkins.services.memberprofile; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; +import com.objectcomputing.checkins.security.permissions.Permissions; import io.micronaut.core.annotation.Nullable; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; @@ -127,6 +129,7 @@ public Mono>> findByValue(@Nullable * @return {@link MemberProfileResponseDTO} The created member profile */ @Post() + @RequiredPermission(Permissions.CAN_CREATE_ORGANIZATION_MEMBERS) public Mono> save(@Body @Valid MemberProfileCreateDTO memberProfile) { return Mono.fromCallable(() -> memberProfileServices.saveProfile(fromDTO(memberProfile))) @@ -165,6 +168,7 @@ public Mono> update(@Body @Valid MemberPr * @return */ @Delete("/{id}") + @RequiredPermission(Permissions.CAN_DELETE_ORGANIZATION_MEMBERS) public Mono delete(@NotNull UUID id) { return Mono.fromCallable(() -> memberProfileServices.deleteProfile(id)) .publishOn(Schedulers.fromExecutor(eventLoopGroup)) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportController.java b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportController.java index a63406ab84..c71267555b 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportController.java @@ -1,5 +1,7 @@ package com.objectcomputing.checkins.services.memberprofile.anniversaryreport; +import com.objectcomputing.checkins.security.permissions.Permissions; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Consumes; @@ -49,6 +51,7 @@ public AnniversaryReportController(AnniversaryServices anniversaryServices, */ @Get("/{?month}") + @RequiredPermission(Permissions.CAN_VIEW_ANNIVERSARY_REPORT) public Mono>> findByValue(@Nullable String[] month) { return Mono.fromCallable(() -> anniversaryServices.findByValue(month)) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayController.java b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayController.java index 58de204f11..b3d3c91124 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayController.java @@ -1,6 +1,8 @@ package com.objectcomputing.checkins.services.memberprofile.birthday; +import com.objectcomputing.checkins.security.permissions.Permissions; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Consumes; @@ -51,6 +53,7 @@ public BirthDayController(BirthDayServices birthDayServices, */ @Get("/{?month,dayOfMonth}") + @RequiredPermission(Permissions.CAN_VIEW_BIRTHDAY_REPORT) public Mono>> findByValue(@Nullable String[] month, @Nullable Integer[] dayOfMonth) { return Mono.fromCallable(() -> birthDayServices.findByValue(month, dayOfMonth)) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportController.java b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportController.java index 30bed21706..5b7d515610 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportController.java @@ -1,8 +1,10 @@ package com.objectcomputing.checkins.services.memberprofile.csvreport; +import com.objectcomputing.checkins.security.permissions.Permissions; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.memberprofile.MemberProfileServices; import com.objectcomputing.checkins.services.memberprofile.MemberProfileUtils; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.http.HttpResponse; import io.micronaut.http.MutableHttpResponse; import io.micronaut.scheduling.TaskExecutors; @@ -44,6 +46,7 @@ public MemberProfileReportController(MemberProfileServices memberProfileServices } @Get(uri = "/csv", produces = MediaType.TEXT_CSV) + @RequiredPermission(Permissions.CAN_VIEW_PROFILE_REPORT) public Mono> generateCsv() { return Flux.defer(() -> Flux.fromIterable(memberProfileServices.findByValues(null, null, null, null, null, null, false))) .subscribeOn(ioScheduler) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportController.java b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportController.java index 9b66ea004e..12bcbd7c84 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportController.java @@ -1,6 +1,8 @@ package com.objectcomputing.checkins.services.memberprofile.retentionreport; import com.objectcomputing.checkins.exceptions.BadArgException; +import com.objectcomputing.checkins.security.permissions.Permissions; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; @@ -46,6 +48,7 @@ public RetentionReportController(RetentionReportServices retentionReportServices * @return {@link RetentionReportResponseDTO} Returned retention report */ @Post() + @RequiredPermission(Permissions.CAN_VIEW_RETENTION_REPORT) public Mono> reportRetention(@Body @Valid @NotNull RetentionReportRequestDTO requestBody, HttpRequest request) { if (requestBody.getStartDate().isAfter(requestBody.getEndDate()) || diff --git a/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionController.java b/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionController.java index bd610425d7..e525aa6853 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionController.java @@ -42,7 +42,7 @@ public PermissionController(PermissionServices permissionServices, /** * Get all permissions (orders by permission name) * - * @return {@link List < Permission > list of Permissions} + * @return {@link List < Permission > list order by Permissions} */ @RequiredPermission(Permissions.CAN_VIEW_PERMISSIONS) @Get("/OrderByPermission") @@ -57,7 +57,7 @@ public Mono>> listOrderByPermission() { /** * Get all permissions * - * @return {@link List < Permission > list of Permissions} + * @return {@link List < Permission > list of all Permissions} */ @RequiredPermission(Permissions.CAN_VIEW_PERMISSIONS) @Get diff --git a/server/src/main/resources/application-dev.yml b/server/src/main/resources/application-dev.yml index b3f36f5001..4864659573 100644 --- a/server/src/main/resources/application-dev.yml +++ b/server/src/main/resources/application-dev.yml @@ -1,3 +1,7 @@ +datasources: + default: + maximum-pool-size: 8 +--- flyway: enabled: enabled datasources: diff --git a/server/src/main/resources/db/dev/R__Load_testing_data.sql b/server/src/main/resources/db/dev/R__Load_testing_data.sql index 59e379c594..85bec60e01 100644 --- a/server/src/main/resources/db/dev/R__Load_testing_data.sql +++ b/server/src/main/resources/db/dev/R__Load_testing_data.sql @@ -10,117 +10,123 @@ delete from guild; delete from member_skills; delete from pulse_response; delete from questions; +delete from member_roles; delete from role_permissions; +delete from permissions; delete from role; delete from team_member; delete from team; delete from feedback_answers; delete from feedback_requests; delete from template_questions; +delete from review_periods; delete from feedback_templates; delete from member_profile; delete from skills; -INSERT INTO member_profile +-- Member Profiles +INSERT INTO member_profile -- Gina Bremehr (id, firstName, lastName, title, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('01b7d769-9fa2-43ff-95c7-f3b950a27bf9', PGP_SYM_ENCRYPT('Gina','${aeskey}'), PGP_SYM_ENCRYPT('Bremehr','${aeskey}'), PGP_SYM_ENCRYPT('COO','${aeskey}'), PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('bremehrg@objectcomputing.com','${aeskey}'), '12312345', '2012-09-20', PGP_SYM_ENCRYPT('Epitome of Strong Woman','${aeskey}'), null, '1988-09-21'); -INSERT INTO member_profile +INSERT INTO member_profile -- Ron Steinkamp (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('2559a257-ae84-4076-9ed4-3820c427beeb', PGP_SYM_ENCRYPT('Ron','${aeskey}'), PGP_SYM_ENCRYPT('Steinkamp','${aeskey}'), PGP_SYM_ENCRYPT('Senior Project Manager','${aeskey}'), '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('steinkampr@objectcomputing.com','${aeskey}'), '12312346', '2012-09-29', PGP_SYM_ENCRYPT('Managing projects well','${aeskey}'), null, '1988-09-02'); -INSERT INTO member_profile +INSERT INTO member_profile -- John Meyerin (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('802cb1f5-a255-4236-8719-773fa53d79d9', PGP_SYM_ENCRYPT('John','${aeskey}'), PGP_SYM_ENCRYPT('Meyerin','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '2559a257-ae84-4076-9ed4-3820c427beeb', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('meyerinj@objectcomputing.com','${aeskey}'), '12312347', '2012-09-29', PGP_SYM_ENCRYPT('Outstanding Engineer','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Geetika Sharma (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', PGP_SYM_ENCRYPT('Geetika','${aeskey}'), PGP_SYM_ENCRYPT('Sharma','${aeskey}'), PGP_SYM_ENCRYPT('PMO Administrator','${aeskey}'), '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('sharmag@objectcomputing.com','${aeskey}'), '12312348', '2012-09-29', PGP_SYM_ENCRYPT('Engineer Wrangler Extrodinaire','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Holly Williams (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('Holly','${aeskey}'), PGP_SYM_ENCRYPT('Williams','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '802cb1f5-a255-4236-8719-773fa53d79d9', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('williamsh@objectcomputing.com','${aeskey}'), '12312349', '2012-09-29', PGP_SYM_ENCRYPT('Software Engineer Remarkable','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Michael Kimberlin (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES -('6207b3fd-042d-49aa-9e28-dcc04f537c2d', PGP_SYM_ENCRYPT('Michael','${aeskey}'), PGP_SYM_ENCRYPT('Kimberlin','${aeskey}'), PGP_SYM_ENCRYPT('Director of Organizational Development','${aeskey}'), '8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('kimberlinm@objectcomputing.com','${aeskey}'), '12312342', '2012-09-29', PGP_SYM_ENCRYPT('Developer of developers and others','${aeskey}'), null); +('6207b3fd-042d-49aa-9e28-dcc04f537c2d', PGP_SYM_ENCRYPT('Michael','${aeskey}'), PGP_SYM_ENCRYPT('Kimberlin','${aeskey}'), PGP_SYM_ENCRYPT('Director of Organizational Development','${aeskey}'), '8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('kimberlinm@objectcomputing.com','${aeskey}'), '12312342', '2012-09-29', PGP_SYM_ENCRYPT('Developer of developers and others','${aeskey}'), '01b7d769-9fa2-43ff-95c7-f3b950a27bf9'); -INSERT INTO member_profile +INSERT INTO member_profile -- Mark Volkmann (id, firstName, lastName, title, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', PGP_SYM_ENCRYPT('Mark','${aeskey}'), PGP_SYM_ENCRYPT('Volkmann','${aeskey}'), PGP_SYM_ENCRYPT('Partner and Distinguished Engineer','${aeskey}'), PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('volkmannm@objectcomputing.com','${aeskey}'), '12312343', '2012-09-29', PGP_SYM_ENCRYPT('Software Engineer Spectacular','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Pramukh Bagur (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('6884ab96-2275-4af9-89d8-ad84254d8759', PGP_SYM_ENCRYPT('Pramukh','${aeskey}'), PGP_SYM_ENCRYPT('Bagur','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '802cb1f5-a255-4236-8719-773fa53d79d9', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('bagurp@objectcomputing.com','${aeskey}'), '12312344', '2012-09-29', PGP_SYM_ENCRYPT('Top notch Engineer','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Jesse Hanner (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', PGP_SYM_ENCRYPT('Jesse','${aeskey}'), PGP_SYM_ENCRYPT('Hanner','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '6884ab96-2275-4af9-89d8-ad84254d8759', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('hannerj@objectcomputing.com','${aeskey}'), '123123450', '2012-09-29', PGP_SYM_ENCRYPT('Amazing Engineer','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Suman Maroju (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('1b4f99da-ef70-4a76-9b37-8bb783b749ad', PGP_SYM_ENCRYPT('Suman','${aeskey}'), PGP_SYM_ENCRYPT('Maroju','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('marojus@objectcomputing.com','${aeskey}'), '123123410', '2012-09-29', PGP_SYM_ENCRYPT('Superior Engineer','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Mohit Bhatia (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('b2d35288-7f1e-4549-aa2b-68396b162490', PGP_SYM_ENCRYPT('Mohit','${aeskey}'), PGP_SYM_ENCRYPT('Bhatia','${aeskey}'), PGP_SYM_ENCRYPT('Principal Software Engineer','${aeskey}'), '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('bhatiam@objectcomputing.com','${aeskey}'), '123123411', '2012-09-29', PGP_SYM_ENCRYPT('Engineer Extraordinaire','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Zack Brown (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES -('43ee8e79-b33d-44cd-b23c-e183894ebfef', PGP_SYM_ENCRYPT('Zack','${aeskey}'), PGP_SYM_ENCRYPT('Brown','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '2559a257-ae84-4076-9ed4-3820c427beeb', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('brownz@objectcomputing.com','${aeskey}'), '123123412', '2012-09-29', PGP_SYM_ENCRYPT('Engineer Phenomenal','${aeskey}'), null); +('43ee8e79-b33d-44cd-b23c-e183894ebfef', PGP_SYM_ENCRYPT('Zack','${aeskey}'), PGP_SYM_ENCRYPT('Brown','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '2559a257-ae84-4076-9ed4-3820c427beeb', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('brownz@objectcomputing.com','${aeskey}'), '123123412', '2012-09-29', PGP_SYM_ENCRYPT('Engineer Phenomenal','${aeskey}'), '6207b3fd-042d-49aa-9e28-dcc04f537c2d'); -INSERT INTO member_profile +INSERT INTO member_profile -- Joe Warner (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid) VALUES ('066b186f-1425-45de-89f2-4ddcc6ebe237', PGP_SYM_ENCRYPT('Joe','${aeskey}'), PGP_SYM_ENCRYPT('Warner','${aeskey}'), PGP_SYM_ENCRYPT('Software Engineer','${aeskey}'), '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('warnerj@objectcomputing.com','${aeskey}'), '123123413', '2012-09-29', PGP_SYM_ENCRYPT('Engineer of Supreme Ability','${aeskey}'), null); -INSERT INTO member_profile +INSERT INTO member_profile -- Julia Smith (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('Julia','${aeskey}'), PGP_SYM_ENCRYPT('Smith','${aeskey}'), PGP_SYM_ENCRYPT('Intern','${aeskey}'), '6207b3fd-042d-49aa-9e28-dcc04f537c2d', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('smithj@objectcomputing.com','${aeskey}'), '010101010', '2021-05-22', PGP_SYM_ENCRYPT('Local creature in discovery room','${aeskey}'), '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '1998-07-07'); -INSERT INTO member_profile +INSERT INTO member_profile -- Faux Freddy (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('2dee821c-de32-4d9c-9ecb-f73e5903d17a', PGP_SYM_ENCRYPT('Faux','${aeskey}'), PGP_SYM_ENCRYPT('Freddy','${aeskey}'), PGP_SYM_ENCRYPT('Test Engineer','${aeskey}'), '59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('testing@objectcomputing.com','${aeskey}'), '010101011', '2021-05-22', PGP_SYM_ENCRYPT('Test user 1','${aeskey}'), '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '1950-01-01'); -INSERT INTO member_profile +INSERT INTO member_profile -- Unreal Ulysses (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('dfe2f986-fac0-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('Unreal','${aeskey}'), PGP_SYM_ENCRYPT('Ulysses','${aeskey}'), PGP_SYM_ENCRYPT('Test Engineer 2','${aeskey}'), '59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('St. Louis','${aeskey}'), PGP_SYM_ENCRYPT('testing2@objectcomputing.com','${aeskey}'), '010101012', '2021-05-22', PGP_SYM_ENCRYPT('Test user 2','${aeskey}'), '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '1950-01-01'); -INSERT INTO member_profile +INSERT INTO member_profile -- Kazuhira Miller (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('a90be358-aa3d-49c8-945a-879a93646e45', PGP_SYM_ENCRYPT('Kazuhira','${aeskey}'), PGP_SYM_ENCRYPT('Miller','${aeskey}'), PGP_SYM_ENCRYPT('Unit Coordinator','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', PGP_SYM_ENCRYPT('Mother Base','${aeskey}'), PGP_SYM_ENCRYPT('millerkaz@objectcomputing.com','${aeskey}'), '012345678', '2022-03-29', PGP_SYM_ENCRYPT('Bff with Big Boss','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', '1943-07-04'); -INSERT INTO member_profile +INSERT INTO member_profile -- Big Boss (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', PGP_SYM_ENCRYPT('Big','${aeskey}'), PGP_SYM_ENCRYPT('Boss','${aeskey}'), PGP_SYM_ENCRYPT('Sneaky Snake','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', PGP_SYM_ENCRYPT('Mother Base','${aeskey}'), PGP_SYM_ENCRYPT('bossb@objectcomputing.com','${aeskey}'), '351242153', '2022-03-29', PGP_SYM_ENCRYPT('The Legendary Big Boss','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', '1943-07-04'); -INSERT INTO member_profile +INSERT INTO member_profile -- Revolver Ocelot (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('105f2968-a182-45a3-892c-eeff76383fe0', PGP_SYM_ENCRYPT('Revolver','${aeskey}'), PGP_SYM_ENCRYPT('Ocelot','${aeskey}'), PGP_SYM_ENCRYPT('Shalashaska','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', PGP_SYM_ENCRYPT('Mother Base','${aeskey}'), PGP_SYM_ENCRYPT('ocelotr@objectcomputing.com','${aeskey}'), '489102361', '2022-03-29', PGP_SYM_ENCRYPT('Loves to reload during battle','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', '1943-07-04'); -INSERT INTO member_profile +INSERT INTO member_profile -- Huey Emmerich (id, firstName, lastName, title, pdlid, location, workEmail, employeeid, startdate, biotext, supervisorid, birthDate) VALUES ('8d75c07e-6adc-437a-8659-7dd953ce6600', PGP_SYM_ENCRYPT('Huey','${aeskey}'), PGP_SYM_ENCRYPT('Emmerich','${aeskey}'), PGP_SYM_ENCRYPT('Head of R&D','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', PGP_SYM_ENCRYPT('Mother Base','${aeskey}'), PGP_SYM_ENCRYPT('emmerichh@objectcomputing.com','${aeskey}'), '657483498', '2022-03-29', PGP_SYM_ENCRYPT('Waiting for love to bloom on the battlefield','${aeskey}'), '43ee8e79-b33d-44cd-b23c-e183894ebfef', '1943-07-04'); + +-- Roles INSERT INTO role (id, description, role) VALUES @@ -137,363 +143,404 @@ VALUES ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', PGP_SYM_ENCRYPT('is a pdl','${aeskey}'), 'PDL'); - +-- Admin Role Assigning INSERT INTO member_roles (roleid, memberid) VALUES - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '6207b3fd-042d-49aa-9e28-dcc04f537c2d'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '6207b3fd-042d-49aa-9e28-dcc04f537c2d'); -- Michael Kimberlin INSERT INTO member_roles (roleid, memberid) VALUES - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '2559a257-ae84-4076-9ed4-3820c427beeb'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '2559a257-ae84-4076-9ed4-3820c427beeb'); -- Ron Steinkamp INSERT INTO member_roles (roleid, memberid) VALUES - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498'); -- Geetika Sharma INSERT INTO member_roles (roleid, memberid) VALUES - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '43ee8e79-b33d-44cd-b23c-e183894ebfef'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '43ee8e79-b33d-44cd-b23c-e183894ebfef'); -- Zack Brown INSERT INTO member_roles (roleid, memberid) VALUES - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '6884ab96-2275-4af9-89d8-ad84254d8759'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '6884ab96-2275-4af9-89d8-ad84254d8759'); -- Pramukh Bagur INSERT INTO member_roles (roleid, memberid) VALUES - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '8fa673c0-ca19-4271-b759-41cb9db2e83a'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '8fa673c0-ca19-4271-b759-41cb9db2e83a'); -- Holly Williams -INSERT INTO member_roles - (roleid, memberid) +INSERT INTO member_roles( + roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '6207b3fd-042d-49aa-9e28-dcc04f537c2d'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '066b186f-1425-45de-89f2-4ddcc6ebe237'); -- Joe Warner + +-- PDL Role Assigning INSERT INTO member_roles (roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '2559a257-ae84-4076-9ed4-3820c427beeb'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '6207b3fd-042d-49aa-9e28-dcc04f537c2d'); -- Michael Kimberlin INSERT INTO member_roles (roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '2559a257-ae84-4076-9ed4-3820c427beeb'); -- Ron Steinkamp INSERT INTO member_roles (roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498'); -- Geetika Sharma INSERT INTO member_roles (roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d'); -- Mark Volkmann INSERT INTO member_roles (roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '802cb1f5-a255-4236-8719-773fa53d79d9'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9'); -- Gina Bremehr INSERT INTO member_roles (roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '6884ab96-2275-4af9-89d8-ad84254d8759'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '802cb1f5-a255-4236-8719-773fa53d79d9'); -- John Meyerin INSERT INTO member_roles -(roleid, memberid) + (roleid, memberid) VALUES -('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '8fa673c0-ca19-4271-b759-41cb9db2e83a'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '6884ab96-2275-4af9-89d8-ad84254d8759'); -- Pramukh Bagur INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '8fa673c0-ca19-4271-b759-41cb9db2e83a'); -- Holly Williams -INSERT INTO member_roles - (roleid, memberid) +INSERT INTO member_roles( + roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '2559a257-ae84-4076-9ed4-3820c427beeb'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '066b186f-1425-45de-89f2-4ddcc6ebe237'); -- Joe Warner + +-- Member Role Assigning INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '802cb1f5-a255-4236-8719-773fa53d79d9'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9'); -- Gina Bremehr INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '2559a257-ae84-4076-9ed4-3820c427beeb'); -- Ron Steinkamp INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '6207b3fd-042d-49aa-9e28-dcc04f537c2d'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '802cb1f5-a255-4236-8719-773fa53d79d9'); -- John Meyerin INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498'); -- Geetika Sharma INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '6207b3fd-042d-49aa-9e28-dcc04f537c2d'); -- Michael Kimberlin INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '6884ab96-2275-4af9-89d8-ad84254d8759'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d'); -- Mark Volkmann INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '1b4f99da-ef70-4a76-9b37-8bb783b749ad'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3'); -- Jesse Hanner INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'b2d35288-7f1e-4549-aa2b-68396b162490'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '6884ab96-2275-4af9-89d8-ad84254d8759'); -- Pramukh Bagur INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '43ee8e79-b33d-44cd-b23c-e183894ebfef'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '1b4f99da-ef70-4a76-9b37-8bb783b749ad'); -- Suman Maroju INSERT INTO member_roles (roleid, memberid) VALUES - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '8fa673c0-ca19-4271-b759-41cb9db2e83a'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'b2d35288-7f1e-4549-aa2b-68396b162490'); -- Mohit Bhatia -INSERT INTO member_roles( - roleid, memberid) +INSERT INTO member_roles + (roleid, memberid) VALUES - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '066b186f-1425-45de-89f2-4ddcc6ebe237'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '43ee8e79-b33d-44cd-b23c-e183894ebfef'); -- Zack Brown -INSERT INTO member_roles( - roleid, memberid) +INSERT INTO member_roles + (roleid, memberid) VALUES - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '066b186f-1425-45de-89f2-4ddcc6ebe237'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '8fa673c0-ca19-4271-b759-41cb9db2e83a'); -- Holly Williams -INSERT INTO team +-- Teams +INSERT INTO team -- Checkins Experts (id, name, description) VALUES ('a8733740-cf4c-4c16-a8cf-4f928c409acc', PGP_SYM_ENCRYPT('Checkins Experts','${aeskey}'), PGP_SYM_ENCRYPT('Checkins Engineers of superior knowledge','${aeskey}')); -INSERT INTO team +INSERT INTO team -- JavaScript Gurus (id, name, description) VALUES ('e8f052a8-40b5-4fb4-9bab-8b16ed36adc7', PGP_SYM_ENCRYPT('JavaScript Gurus','${aeskey}'), PGP_SYM_ENCRYPT('JavaScript Engineers of Outstanding Skill','${aeskey}')); -INSERT INTO team +INSERT INTO team -- Micronaut Genii (id, name, description) VALUES ('036b95a5-357c-45bd-b60e-e8e2e1afec83', PGP_SYM_ENCRYPT('Micronaut Genii','${aeskey}'), PGP_SYM_ENCRYPT('Micronaut Engineers of Genius Caliber','${aeskey}')); -INSERT INTO team +INSERT INTO team -- PMO Superness (id, name, description) VALUES ('e545dfa1-a07d-4099-9a5b-ed14f07b87cc', PGP_SYM_ENCRYPT('PMO Superness','${aeskey}'), PGP_SYM_ENCRYPT('Excellent PMO Artists','${aeskey}')); + +-- Team Members +---- Checkins Experts Members INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('d2ee49cb-9479-49fb-80d7-43c3c1b50f91', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '802cb1f5-a255-4236-8719-773fa53d79d9', true); +('d2ee49cb-9479-49fb-80d7-43c3c1b50f91', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '802cb1f5-a255-4236-8719-773fa53d79d9', true); -- John Meyerin INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('0f299d11-df47-406f-a426-8e3160eaeb21', '036b95a5-357c-45bd-b60e-e8e2e1afec83', '8fa673c0-ca19-4271-b759-41cb9db2e83a', false); +('c7b4d5e0-09ba-479a-8c40-ca9bbd8f217a', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '6884ab96-2275-4af9-89d8-ad84254d8759', false); -- Pramukh Bagur INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('9e7e9577-a36b-4238-84cc-4f160ac60b40', 'e545dfa1-a07d-4099-9a5b-ed14f07b87cc', '2559a257-ae84-4076-9ed4-3820c427beeb', true); +('20bf1ddb-53a0-436e-99dc-802c1199e282', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', false); -- Jesse Hanner INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('439ad8a8-500f-4f3f-963b-a86437d5820a', 'e545dfa1-a07d-4099-9a5b-ed14f07b87cc', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', false); +('122ca588-bf61-4aea-bb6e-39838328bf85', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', 'b2d35288-7f1e-4549-aa2b-68396b162490', true); -- Mohit Bhatia INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('8eea2f65-160c-4db7-9f6d-f367acd333fb', 'e8f052a8-40b5-4fb4-9bab-8b16ed36adc7', '43ee8e79-b33d-44cd-b23c-e183894ebfef', false); +('adff5631-d4dc-4c61-b3d4-232d1cce8ce0', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '1b4f99da-ef70-4a76-9b37-8bb783b749ad', false); -- Suman Maroju +---- JavaScript Gurus Members INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('c7b4d5e0-09ba-479a-8c40-ca9bbd8f217a', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '6884ab96-2275-4af9-89d8-ad84254d8759', false); +('8eea2f65-160c-4db7-9f6d-f367acd333fb', 'e8f052a8-40b5-4fb4-9bab-8b16ed36adc7', '43ee8e79-b33d-44cd-b23c-e183894ebfef', false); -- Zack Brown INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('20bf1ddb-53a0-436e-99dc-802c1199e282', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', false); +('f84a21ca-1579-4c6a-8148-6a355518797a', 'e8f052a8-40b5-4fb4-9bab-8b16ed36adc7', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', true); -- Mark Volkmann +---- Micronaut Genii Members INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('f84a21ca-1579-4c6a-8148-6a355518797a', 'e8f052a8-40b5-4fb4-9bab-8b16ed36adc7', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', true); +('7cf7820a-b099-48e5-b630-4f921ee17d16', '036b95a5-357c-45bd-b60e-e8e2e1afec83', '8fa673c0-ca19-4271-b759-41cb9db2e83a', false); -- Holly Williams +---- PMO Superness Members INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('122ca588-bf61-4aea-bb6e-39838328bf85', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', 'b2d35288-7f1e-4549-aa2b-68396b162490', true); +('9e7e9577-a36b-4238-84cc-4f160ac60b40', 'e545dfa1-a07d-4099-9a5b-ed14f07b87cc', '2559a257-ae84-4076-9ed4-3820c427beeb', true); -- Ron Steinkamp INSERT INTO team_member (id, teamid, memberid, lead) VALUES -('adff5631-d4dc-4c61-b3d4-232d1cce8ce0', 'a8733740-cf4c-4c16-a8cf-4f928c409acc', '1b4f99da-ef70-4a76-9b37-8bb783b749ad', false); +('97f3a251-0ed2-449b-a756-07226e6e6522', 'e545dfa1-a07d-4099-9a5b-ed14f07b87cc', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', false); -- Geetika Sharma + + +-- Pramukh Bagur Check-ins +---- 2020-09-29 PM - Active INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Michael Kimberlin VALUES ('92e91c5a-cb00-461a-86b4-d01b3f07754e', '6884ab96-2275-4af9-89d8-ad84254d8759', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '2020-09-29 17:40:29.04' , false); +INSERT INTO action_items +(id, checkinid, createdbyid, description) -- created by: Holly Williams +Values('b0840fc5-9a8e-43d8-be99-9682fc32e69e', '92e91c5a-cb00-461a-86b4-d01b3f07754e', '8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('Action Item for Holly Williams','${aeskey}')); + +INSERT INTO action_items +(id, checkinid, createdbyid, description) -- created by: Holly Williams +Values('9a779dec-c1b6-484e-ad76-38e7c06b011c', '92e91c5a-cb00-461a-86b4-d01b3f07754e', '8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('Another Action Item for Holly Williams','${aeskey}')); + +---- 2020-09-29 AM - Active INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: John Meyerin VALUES ('1343411e-26bf-4274-81ca-1b46ba3f0cb0', '6884ab96-2275-4af9-89d8-ad84254d8759', '802cb1f5-a255-4236-8719-773fa53d79d9', '2020-09-29 10:40:29.04' , false); +INSERT INTO action_items +(id, checkinid, createdbyid, description) -- created by: Pramukh Bagur +Values('0ead3434-82e7-47b4-a0ef-d1f44d01732b', '1343411e-26bf-4274-81ca-1b46ba3f0cb0', '6884ab96-2275-4af9-89d8-ad84254d8759', PGP_SYM_ENCRYPT('Action Item for Pramukh Bagur','${aeskey}')); + + +-- Mohit Bhatia Check-ins +---- 2020-09-29 - Active INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Michael Kimberlin VALUES ('8aa38f8c-2169-41b1-8548-1c2472fab7ff', 'b2d35288-7f1e-4549-aa2b-68396b162490', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '2020-09-29 15:40:29.04' , false); -INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) -VALUES -('cf806bb5-7269-48ee-8b72-0b2762c7669f', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '6884ab96-2275-4af9-89d8-ad84254d8759', '2020-09-29 13:42:29.04' , false); +-- Zack Brown Check-ins +---- 2020-09-29 - Completed INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Mark Volkmann VALUES ('bbc3db2a-181d-4ddb-a2e4-7a9842cdfd78', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', '2020-09-29 11:32:29.04' , true); + +-- Jesse Hanner Check-ins +---- 2020-03-20 - Completed INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Pramukh Bagur VALUES -('1f68cfdc-0a4b-4118-b38e-d862a8b82bbb', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '802cb1f5-a255-4236-8719-773fa53d79d9', '2020-09-20 11:32:29.04' , false); +('ff52e697-55a1-4a89-a13f-f3d6fb8f6b3d', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '6884ab96-2275-4af9-89d8-ad84254d8759', '2020-03-20 11:32:29.04' , true); -INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +INSERT INTO checkin_notes +(id, checkinid, createdbyid, description) -- created by: Jesse Hanner VALUES -('e60c3ca1-3894-4466-b418-9b743d058cc8', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '802cb1f5-a255-4236-8719-773fa53d79d9', '2020-06-20 11:32:29.04' , false); +('e5449026-cd9a-4bed-a648-fe3ad9382831', 'ff52e697-55a1-4a89-a13f-f3d6fb8f6b3d', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', PGP_SYM_ENCRYPT('Jesses note','${aeskey}')); +INSERT INTO private_notes +(id, checkinid, createdbyid, description) -- created by: Jesse Hanner +VALUES +('e5449026-cd9a-4bed-a648-fe3ad9382832', 'ff52e697-55a1-4a89-a13f-f3d6fb8f6b3d', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', PGP_SYM_ENCRYPT('Jesses private note','${aeskey}')); + +---- 2020-09-29 - Active INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Pramukh Bagur VALUES -('ff52e697-55a1-4a89-a13f-f3d6fb8f6b3d', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '6884ab96-2275-4af9-89d8-ad84254d8759', '2020-03-20 11:32:29.04' , true); +('cf806bb5-7269-48ee-8b72-0b2762c7669f', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '6884ab96-2275-4af9-89d8-ad84254d8759', '2020-09-29 13:42:29.04' , false); +INSERT INTO action_items +(id, checkinid, createdbyid, description) -- created by: Jesse Hanner +Values('a6e2c822-feab-4c8b-b164-78158b2d4993', 'cf806bb5-7269-48ee-8b72-0b2762c7669f', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', PGP_SYM_ENCRYPT('Action Item for Jesse Hanner','${aeskey}')); + +---- 2020-09-20 - Active INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: John Meyerin VALUES -('10184287-1746-4827-93fe-4e13cc0d2a6d', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '2021-02-25 11:32:29.04', true); +('1f68cfdc-0a4b-4118-b38e-d862a8b82bbb', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '802cb1f5-a255-4236-8719-773fa53d79d9', '2020-09-20 11:32:29.04' , false); +---- 2020-06-20 - Active INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: John Meyerin VALUES -('bdea5de0-4358-4b33-9772-0cd953567540', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '2021-03-05 11:32:29.04', true); +('e60c3ca1-3894-4466-b418-9b743d058cc8', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '802cb1f5-a255-4236-8719-773fa53d79d9', '2020-06-20 11:32:29.04' , false); + +-- Unreal Ulysses Check-ins +---- 2021-02-25 - Completed INSERT INTO checkins -(id, teammemberid, pdlid, checkindate, completed) +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Geetika Sharma VALUES -('553aa528-d5f6-4d15-bfb6-b53738dc7954', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', '2022-01-16 11:32:29.04', true); +('10184287-1746-4827-93fe-4e13cc0d2a6d', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '2021-02-25 11:32:29.04', true); INSERT INTO checkin_notes -(id, checkinid, createdbyid, description) +(id, checkinid, createdbyid, description) -- created by: Geetika Sharma VALUES ('226a2ab8-03cc-4f9e-96c8-55cf187df045', '10184287-1746-4827-93fe-4e13cc0d2a6d', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', PGP_SYM_ENCRYPT('Geetika''s first note for Ulysses', '${aeskey}')); INSERT INTO private_notes -(id, checkinid, createdbyid, description) +(id, checkinid, createdbyid, description) -- created by: Geetika Sharma VALUES ('444f6923-7b8e-4d03-8d33-021e7a72653c', '10184287-1746-4827-93fe-4e13cc0d2a6d', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', PGP_SYM_ENCRYPT('Geetika''s first private note for Ulysses', '${aeskey}')); +---- 2021-03-05 - Completed +INSERT INTO checkins +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Geetika Sharma +VALUES +('bdea5de0-4358-4b33-9772-0cd953567540', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '2021-03-05 11:32:29.04', true); + INSERT INTO checkin_notes -(id, checkinid, createdbyid, description) +(id, checkinid, createdbyid, description) -- created by: Geetika Sharma VALUES ('c0d76e16-f96a-4598-8006-52b803e8b26d', 'bdea5de0-4358-4b33-9772-0cd953567540', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', PGP_SYM_ENCRYPT('Geetika''s second note for Ulysses', '${aeskey}')); INSERT INTO private_notes -(id, checkinid, createdbyid, description) +(id, checkinid, createdbyid, description) -- created by: Geetika Sharma VALUES ('cc47b557-ed78-45c4-b577-89c1c9e705bd', 'bdea5de0-4358-4b33-9772-0cd953567540', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', PGP_SYM_ENCRYPT('Geetika''s second private note for Ulysses', '${aeskey}')); -INSERT INTO checkin_notes -(id, checkinid, createdbyid, description) -VALUES -('73a5e7b5-9292-45c0-a605-5b5c63230892', '553aa528-d5f6-4d15-bfb6-b53738dc7954', '59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('Julia''s first note for Ulysses', '${aeskey}')); - -INSERT INTO private_notes -(id, checkinid, createdbyid, description) +---- 2022-01-16 - Completed +INSERT INTO checkins +(id, teammemberid, pdlid, checkindate, completed) -- pdl: Julia Smith VALUES -('73a5e7b5-9292-45c0-a605-5b5c63230892', '553aa528-d5f6-4d15-bfb6-b53738dc7954', '59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('Julia''s first private note for Ulysses', '${aeskey}')); +('553aa528-d5f6-4d15-bfb6-b53738dc7954', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', '2022-01-16 11:32:29.04', true); INSERT INTO checkin_notes -(id, checkinid, createdbyid, description) +(id, checkinid, createdbyid, description) -- created by: Julia Smith VALUES -('e5449026-cd9a-4bed-a648-fe3ad9382831', 'ff52e697-55a1-4a89-a13f-f3d6fb8f6b3d', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', PGP_SYM_ENCRYPT('Jesses note','${aeskey}')); +('73a5e7b5-9292-45c0-a605-5b5c63230892', '553aa528-d5f6-4d15-bfb6-b53738dc7954', '59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('Julia''s first note for Ulysses', '${aeskey}')); INSERT INTO private_notes -(id, checkinid, createdbyid, description) +(id, checkinid, createdbyid, description) -- created by: Julia Smith VALUES -('e5449026-cd9a-4bed-a648-fe3ad9382832', 'ff52e697-55a1-4a89-a13f-f3d6fb8f6b3d', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', PGP_SYM_ENCRYPT('Jesses private note','${aeskey}')); - -INSERT INTO action_items -(id, checkinid, createdbyid, description) -Values('b0840fc5-9a8e-43d8-be99-9682fc32e69e', '92e91c5a-cb00-461a-86b4-d01b3f07754e', '8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('Action Item for Holly Williams','${aeskey}')); - -INSERT INTO action_items -(id, checkinid, createdbyid, description) -Values('9a779dec-c1b6-484e-ad76-38e7c06b011c', '92e91c5a-cb00-461a-86b4-d01b3f07754e', '8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('Another Action Item for Holly Williams','${aeskey}')); +('73a5e7b5-9292-45c0-a605-5b5c63230892', '553aa528-d5f6-4d15-bfb6-b53738dc7954', '59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('Julia''s first private note for Ulysses', '${aeskey}')); -INSERT INTO action_items -(id, checkinid, createdbyid, description) -Values('a6e2c822-feab-4c8b-b164-78158b2d4993', 'cf806bb5-7269-48ee-8b72-0b2762c7669f', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', PGP_SYM_ENCRYPT('Action Item for Jesse Hanner','${aeskey}')); -INSERT INTO action_items -(id, checkinid, createdbyid, description) -Values('0ead3434-82e7-47b4-a0ef-d1f44d01732b', '1343411e-26bf-4274-81ca-1b46ba3f0cb0', '6884ab96-2275-4af9-89d8-ad84254d8759', PGP_SYM_ENCRYPT('Action Item for Pramukh Bagur','${aeskey}')); - -insert into guild (id, name, description) +-- Guilds +insert into guild (id, name, description) -- Software Engineering values('ba42d181-3c5b-4ee3-938d-be122c314bee', PGP_SYM_ENCRYPT('Software Engineering','${aeskey}'), PGP_SYM_ENCRYPT('Resource for Software Engineering Topics','${aeskey}')); -insert into guild (id, name, description) +insert into guild (id, name, description) -- Micronaut values('06cd3202-a209-4ae1-a49a-10395fbe3548', PGP_SYM_ENCRYPT('Micronaut','${aeskey}'), PGP_SYM_ENCRYPT('For Micronaut Lovers and Learners','${aeskey}')); -insert into guild (id, name, description) +insert into guild (id, name, description) -- Fullstack Development values('d1d4af0e-b1a5-47eb-be49-f3581271f1e3', PGP_SYM_ENCRYPT('Fullstack Development','${aeskey}'), PGP_SYM_ENCRYPT('Full Stack Development Interests','${aeskey}')); + +-- Software Engineering Guild Members insert into guild_member (id, guildId, memberId, lead) -values('fd976615-6a8b-4cd1-8aea-cb7751c8ee1a','ba42d181-3c5b-4ee3-938d-be122c314bee', 'b2d35288-7f1e-4549-aa2b-68396b162490', true); +values('fd976615-6a8b-4cd1-8aea-cb7751c8ee1a','ba42d181-3c5b-4ee3-938d-be122c314bee', 'b2d35288-7f1e-4549-aa2b-68396b162490', true); -- Mohit Bhatia insert into guild_member (id, guildId, memberId, lead) -values('86dc52b9-5b2a-4241-9c54-0fde07600c58','ba42d181-3c5b-4ee3-938d-be122c314bee', '1b4f99da-ef70-4a76-9b37-8bb783b749ad', false); +values('86dc52b9-5b2a-4241-9c54-0fde07600c58','ba42d181-3c5b-4ee3-938d-be122c314bee', '1b4f99da-ef70-4a76-9b37-8bb783b749ad', false); -- Suman Maroju insert into guild_member (id, guildId, memberId, lead) -values('7cd12bb9-6aa4-4edc-831f-f4ebe8f22f62','ba42d181-3c5b-4ee3-938d-be122c314bee', '6884ab96-2275-4af9-89d8-ad84254d8759', false); +values('7cd12bb9-6aa4-4edc-831f-f4ebe8f22f62','ba42d181-3c5b-4ee3-938d-be122c314bee', '6884ab96-2275-4af9-89d8-ad84254d8759', false); -- Pramukh Bagur insert into guild_member (id, guildId, memberId, lead) -values('8a20e99f-c326-4529-8024-26724a8586b1','ba42d181-3c5b-4ee3-938d-be122c314bee', '8fa673c0-ca19-4271-b759-41cb9db2e83a', false); +values('8a20e99f-c326-4529-8024-26724a8586b1','ba42d181-3c5b-4ee3-938d-be122c314bee', '8fa673c0-ca19-4271-b759-41cb9db2e83a', false); -- Holly Williams + +-- Micronaut Guild Members insert into guild_member (id, guildId, memberId, lead) -values('7ffe3937-bdce-4ebb-a03d-8a8b7d4703ef','06cd3202-a209-4ae1-a49a-10395fbe3548', '802cb1f5-a255-4236-8719-773fa53d79d9', true); +values('7ffe3937-bdce-4ebb-a03d-8a8b7d4703ef','06cd3202-a209-4ae1-a49a-10395fbe3548', '802cb1f5-a255-4236-8719-773fa53d79d9', true); -- John Meyerin insert into guild_member (id, guildId, memberId, lead) -values('dd694cf2-c0f9-4470-b897-00c564c1252b','06cd3202-a209-4ae1-a49a-10395fbe3548', '8fa673c0-ca19-4271-b759-41cb9db2e83a', false); +values('dd694cf2-c0f9-4470-b897-00c564c1252b','06cd3202-a209-4ae1-a49a-10395fbe3548', '8fa673c0-ca19-4271-b759-41cb9db2e83a', false); -- Holly Williams + +-- Pulse INSERT INTO pulse_response -(id, submissiondate, updateddate, teammemberid, internalfeelings, externalfeelings) +(id, submissiondate, updateddate, teammemberid, internalfeelings, externalfeelings) -- Holly Williams VALUES ('cda41eed-70ea-4d3f-a9d7-cd0c5158eb5f', '2021-01-29', '2021-02-02', '8fa673c0-ca19-4271-b759-41cb9db2e83a', PGP_SYM_ENCRYPT('Feeling pretty happy','${aeskey}'), PGP_SYM_ENCRYPT('Feeling really good','${aeskey}')); - +-- Permissions insert into permissions (id, permission) values @@ -530,87 +577,219 @@ values ('1fd790d9-df9a-4201-818b-3a9ac5e5be3b', 'CAN_VIEW_ROLE_PERMISSIONS'); insert into permissions - (id, permission) +(id, permission) values ('f6961946-a792-4a16-b675-d8cf7980c17a', 'CAN_VIEW_PERMISSIONS'); +insert into permissions +(id, permission) +values + ('f7e815de-8849-11ee-b9d1-0242ac120002', 'CAN_VIEW_SKILLS_REPORT'); + +insert into permissions +(id, permission) +values + ('f7e81958-8849-11ee-b9d1-0242ac120002', 'CAN_VIEW_RETENTION_REPORT'); + +insert into permissions +(id, permission) +values + ('056e32b2-8d07-11ee-b9d1-0242ac120002', 'CAN_VIEW_ANNIVERSARY_REPORT'); + +insert into permissions +(id, permission) +values + ('2d765f78-8d07-11ee-b9d1-0242ac120002', 'CAN_VIEW_BIRTHDAY_REPORT'); + +insert into permissions +(id, permission) +values + ('2d765d5c-8d07-11ee-b9d1-0242ac120002', 'CAN_VIEW_PROFILE_REPORT'); + +insert into permissions +(id, permission) +values + ('d84772ac-85c5-4030-9a86-7db41770fbf3', 'CAN_CREATE_CHECKINS'); + +insert into permissions +(id, permission) +values + ('d04bd772-4a37-4cc3-91da-8fc7de08f3be', 'CAN_VIEW_CHECKINS'); + +insert into permissions +(id, permission) +values + ('ecd952a1-c7c8-47a9-b4ee-762b99276a6f', 'CAN_UPDATE_CHECKINS'); + + + +-- Admin Permissions insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '439ad8a8-500f-4f3f-963b-a86437d5820a'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '439ad8a8-500f-4f3f-963b-a86437d5820a'); -- CAN_CREATE_ORGANIZATION_MEMBERS insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '0f299d11-df47-406f-a426-8e3160eaeb21'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '0f299d11-df47-406f-a426-8e3160eaeb21'); -- CAN_DELETE_ORGANIZATION_MEMBERS insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '008f6641-0b0a-4e89-84f0-c580f912b80d'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '008f6641-0b0a-4e89-84f0-c580f912b80d'); -- CAN_VIEW_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '1bf32dfe-a204-4c80-889e-829ca66c999b'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '1bf32dfe-a204-4c80-889e-829ca66c999b'); -- CAN_CREATE_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'a574feb9-f2d4-4cbf-9353-bfaccdffa74f'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'a574feb9-f2d4-4cbf-9353-bfaccdffa74f'); -- CAN_DELETE_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '26a2f861-3f7d-4dc3-8762-716b184a3a47'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '26a2f861-3f7d-4dc3-8762-716b184a3a47'); -- CAN_VIEW_FEEDBACK_ANSWER insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '1fd790d9-df9a-4201-818b-3a9ac5e5be3b'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '1fd790d9-df9a-4201-818b-3a9ac5e5be3b'); -- CAN_VIEW_ROLE_PERMISSIONS insert into role_permissions (roleid, permissionid) values - ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'f6961946-a792-4a16-b675-d8cf7980c17a'); + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'f6961946-a792-4a16-b675-d8cf7980c17a'); -- CAN_VIEW_PERMISSIONS +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'f7e815de-8849-11ee-b9d1-0242ac120002'); -- CAN_VIEW_SKILLS_REPORT + +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'f7e81958-8849-11ee-b9d1-0242ac120002'); -- CAN_VIEW_RETENTION_REPORT + +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '056e32b2-8d07-11ee-b9d1-0242ac120002'); -- CAN_VIEW_ANNIVERSARY_REPORT + +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '2d765f78-8d07-11ee-b9d1-0242ac120002'); -- CAN_VIEW_BIRTHDAY_REPORT + +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '2d765d5c-8d07-11ee-b9d1-0242ac120002'); -- CAN_VIEW_PROFILE_REPORT + +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'd84772ac-85c5-4030-9a86-7db41770fbf3'); -- CAN_CREATE_CHECKINS + +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'd04bd772-4a37-4cc3-91da-8fc7de08f3be'); -- CAN_VIEW_CHECKINS + +insert into role_permissions +(roleid, permissionid) +values + ('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'ecd952a1-c7c8-47a9-b4ee-762b99276a6f'); -- CAN_UPDATE_CHECKINS + +-- PDL Permissions insert into role_permissions (roleid, permissionid) values - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '008f6641-0b0a-4e89-84f0-c580f912b80d'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '008f6641-0b0a-4e89-84f0-c580f912b80d'); -- CAN_VIEW_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '1bf32dfe-a204-4c80-889e-829ca66c999b'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '1bf32dfe-a204-4c80-889e-829ca66c999b'); -- CAN_CREATE_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', 'a574feb9-f2d4-4cbf-9353-bfaccdffa74f'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', 'a574feb9-f2d4-4cbf-9353-bfaccdffa74f'); -- CAN_DELETE_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '439ad8a8-500f-4f3f-963b-a86437d5820a'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', '26a2f861-3f7d-4dc3-8762-716b184a3a47'); -- CAN_VIEW_FEEDBACK_ANSWER insert into role_permissions (roleid, permissionid) values - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '008f6641-0b0a-4e89-84f0-c580f912b80d'); + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', 'f6961946-a792-4a16-b675-d8cf7980c17a'); -- CAN_VIEW_PERMISSIONS + +insert into role_permissions +(roleid, permissionid) +values + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', 'd04bd772-4a37-4cc3-91da-8fc7de08f3be'); -- CAN_VIEW_CHECKINS + +insert into role_permissions +(roleid, permissionid) +values + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', 'd84772ac-85c5-4030-9a86-7db41770fbf3'); -- CAN_CREATE_CHECKINS + +insert into role_permissions +(roleid, permissionid) +values + ('d03f5f0b-e29c-4cf4-9ea4-6baa09405c56', 'ecd952a1-c7c8-47a9-b4ee-762b99276a6f'); -- CAN_UPDATE_CHECKINS + +-- Member permissions +insert into role_permissions + (roleid, permissionid) +values + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '008f6641-0b0a-4e89-84f0-c580f912b80d'); -- CAN_VIEW_FEEDBACK_REQUEST + +insert into role_permissions + (roleid, permissionid) +values + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '1bf32dfe-a204-4c80-889e-829ca66c999b'); -- CAN_CREATE_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '1bf32dfe-a204-4c80-889e-829ca66c999b'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'a574feb9-f2d4-4cbf-9353-bfaccdffa74f'); -- CAN_DELETE_FEEDBACK_REQUEST insert into role_permissions (roleid, permissionid) values - ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'a574feb9-f2d4-4cbf-9353-bfaccdffa74f'); + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', '26a2f861-3f7d-4dc3-8762-716b184a3a47'); -- CAN_VIEW_FEEDBACK_ANSWER + +insert into role_permissions + (roleid, permissionid) +values + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'f6961946-a792-4a16-b675-d8cf7980c17a'); -- CAN_VIEW_PERMISSIONS + +insert into role_permissions +(roleid, permissionid) +values + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'd04bd772-4a37-4cc3-91da-8fc7de08f3be'); -- CAN_VIEW_CHECKINS +insert into role_permissions +(roleid, permissionid) +values + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'd84772ac-85c5-4030-9a86-7db41770fbf3'); -- CAN_CREATE_CHECKINS + +insert into role_permissions +(roleid, permissionid) +values + ('8bda2ae9-58c1-4843-a0d5-d0952621f9df', 'ecd952a1-c7c8-47a9-b4ee-762b99276a6f'); -- CAN_UPDATE_CHECKINS + +-- Feedback Templates +---- Quarter 1 Feedback Template INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) -- created by: Michael Kimberlin VALUES ('18ef2032-c264-411e-a8e1-ddda9a714bae', 'Q1 Feedback', 'Get feedback for quarter 1', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '2021-06-06', true, true, false); @@ -624,8 +803,9 @@ INSERT INTO template_questions VALUES ('47f997ca-0045-4147-afcb-0c9ed0b44978', PGP_SYM_ENCRYPT('In what ways are this team member''s contributions impacting the objectives of the organization, their project, or their team?','${aeskey}'), '18ef2032-c264-411e-a8e1-ddda9a714bae', 2, 'TEXT'); +---- Generic Survey 1 INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) -- created by: Gina Bremehr VALUES ('97b0a312-e5dd-46f4-a600-d8be2ad925bb', 'Survey 1', 'Make a survey with a few questions', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', '2021-05-05', true, true, false); @@ -644,8 +824,9 @@ INSERT INTO template_questions VALUES ('afa7e2cb-366a-4c16-a205-c0d493b80d85', PGP_SYM_ENCRYPT('In what ways does this team member represent OCI values?','${aeskey}'), '97b0a312-e5dd-46f4-a600-d8be2ad925bb', 2, 'TEXT'); +---- Generic Mulitple Choice Survey INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) -- created by: Gina Bremehr VALUES ('1c8bc142-c447-4889-986e-42ab177da683', 'Multiple Choice Survey', 'This survey contains radio buttons and sliders.', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', '2022-04-04', true, true, false); @@ -664,23 +845,27 @@ INSERT INTO template_questions VALUES ('bf328e35-e486-4ec8-b3e8-acc2c09419fa', PGP_SYM_ENCRYPT('Feel free to elaborate on the choices you made above if you choose to do so', '${aeskey}'), '1c8bc142-c447-4889-986e-42ab177da683', 3, 'TEXT'); +---- Empty Template INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) -- created by: Ron Steinkamp VALUES ('2cb80a06-e723-482f-af9b-6b9516cabfcd', 'Empty Template', 'This template does not have any questions on it', '2559a257-ae84-4076-9ed4-3820c427beeb', '2020-04-04', true, true, false); +---- Private Template INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) -- created by: Geetika Sharma VALUES ('492e4f61-c7e3-4c30-a650-7ec74f2ba545', 'Private Template', 'This template is private', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '2020-06-07', true, false, false); +---- Private Template 2 INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc) -- created by: Geetika Sharma VALUES ('c5d10880-f561-11eb-9a03-0242ac130003', 'Private Template 2', 'This template is private', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '2020-06-10', true, false, false); +---- Self Review - 2022 INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc, is_review) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc, is_review) -- created by: Gina Bremehr VALUES ('926a37a4-4ded-4633-8900-715b0383aecc', 'Self Review - 2022', 'This survey is intended for performance self-review.', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', '2022-11-01', true, true, false, true); @@ -739,8 +924,9 @@ INSERT INTO template_questions VALUES ('f9e5878c-6c4d-4249-8f1a-c3508d8c1597', PGP_SYM_ENCRYPT('Please provide any additional context or reasoning relevant to your self-assessment.', '${aeskey}'), '926a37a4-4ded-4633-8900-715b0383aecc', 11, 'TEXT'); +---- Annual Review - 2022 INSERT INTO feedback_templates -(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc, is_review) +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc, is_review) -- created by: Gina Bremehr VALUES ('d1e94b60-47c4-4945-87d1-4dc88f088e57', 'Annual Review - 2022', 'This survey is intended for performance review.', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', '2022-11-21', true, true, false, true); @@ -819,55 +1005,84 @@ INSERT INTO template_questions VALUES ('174e5851-cb24-4a0f-890c-e6f041db4127', PGP_SYM_ENCRYPT('Please provide any additional context or reasoning relevant to your assessment of this team member.', '${aeskey}'), 'd1e94b60-47c4-4945-87d1-4dc88f088e57', 15, 'TEXT'); + +-- Feedback Requests without responses +---- Creator: Geetika Sharma INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Suman Maroju, recipient: Jesse Hanner VALUES ('d62b5c09-7ff9-4b0a-bfee-7f467470a7ef', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '1b4f99da-ef70-4a76-9b37-8bb783b749ad', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '18ef2032-c264-411e-a8e1-ddda9a714bae', '2020-07-07', '2021-08-01', null, 'pending'); INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Mohit Bhatia, recipient: Jesse Hanner VALUES ('ab7b21d4-f88c-4494-9b0b-8541636025eb', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', 'b2d35288-7f1e-4549-aa2b-68396b162490', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2020-07-07', null, null, 'pending'); INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Mohit Bhatia, recipient: Zack Brown VALUES ('2dd2347a-c296-4986-b428-3fbf6a24ea1e', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', 'b2d35288-7f1e-4549-aa2b-68396b162490', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2020-07-07', null, null, 'pending'); INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Mohit Bhatia, recipient: Mark Volkmann VALUES ('c15961e4-6e9b-42cd-8140-ece9efe2445c', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498' , 'b2d35288-7f1e-4549-aa2b-68396b162490', '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', '97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2020-07-07', null, '2020-07-08', 'submitted'); INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Holly Williams, recipient: Pramukh Bagur VALUES ('e2e24336-0615-4564-af29-d0f7b3ac3db9', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '8fa673c0-ca19-4271-b759-41cb9db2e83a', '6884ab96-2275-4af9-89d8-ad84254d8759', '18ef2032-c264-411e-a8e1-ddda9a714bae', '2018-12-24', '2018-12-25', null, 'sent'); INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Mohit Bhatia, recipient: Gina Bremehr VALUES ('09fbdaf2-f554-11eb-9a03-0242ac130003', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', 'b2d35288-7f1e-4549-aa2b-68396b162490', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9','97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2020-07-07', null, '2020-07-07', 'submitted'); INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Mohit Bhatia, recipient: Gina Bremehr VALUES ('82d9db7c-f554-11eb-9a03-0242ac130003', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', 'b2d35288-7f1e-4549-aa2b-68396b162490', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9','97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2020-07-05', null, '2020-07-10', 'submitted'); INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Holly Williams, recipient: Zack Brown VALUES ('e2af1c96-a593-48c2-b9e0-a00193a070c7', '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', '8fa673c0-ca19-4271-b759-41cb9db2e83a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2021-08-01', '2021-08-05', '2021-08-02', 'submitted'); +---- Creator: Gina Bremehr INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Ron Steinkamp VALUES -('d09031be-fac1-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2020-08-01', '2020-08-05', '2020-08-02', 'submitted'); +('a50f2f8a-7eb0-4456-b5ef-382086827ba0', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '2559a257-ae84-4076-9ed4-3820c427beeb', '1c8bc142-c447-4889-986e-42ab177da683', '2022-04-14', null, null, 'sent'); +---- Creator: Julia Smith INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Jesse Hanner VALUES -('a50f2f8a-7eb0-4456-b5ef-382086827ba0', '01b7d769-9fa2-43ff-95c7-f3b950a27bf9', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '2559a257-ae84-4076-9ed4-3820c427beeb', '1c8bc142-c447-4889-986e-42ab177da683', '2022-04-14', null, null, 'sent'); +('ab2da7fc-fac2-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3' ,'18ef2032-c264-411e-a8e1-ddda9a714bae', '2021-08-01', '2021-08-05', null, 'pending'); + +---- Creator: Zack Brown +INSERT INTO feedback_requests +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Zack Brown +VALUES +('0d0d872d-4f05-4af8-9804-d0a99e450c37', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'pending'); + +INSERT INTO feedback_requests +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Zack Brown +VALUES +('1aff4993-2324-41cc-8b21-2ab5715ca70b', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'pending'); + +INSERT INTO feedback_requests +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Zack Brown +VALUES +('7ca4d402-0bb9-4989-9087-8a52a63ee5d0', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'pending'); + + +-- Feedback Requests with responses +---- Creator: Julia Smith +INSERT INTO feedback_requests +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Zack Brown +VALUES +('d09031be-fac1-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2020-08-01', '2020-08-05', '2020-08-02', 'submitted'); INSERT INTO feedback_answers (id, answer, question_id, request_id, sentiment) @@ -879,8 +1094,9 @@ INSERT INTO feedback_answers VALUES ('766a3a2c-88de-4487-b285-e3c667ffe0e6', PGP_SYM_ENCRYPT('While they do a good job of innovating courageously, like I said, their presence sometimes impacts client relations.','${aeskey}'), '47f997ca-0045-4147-afcb-0c9ed0b44978', 'd09031be-fac1-11eb-9a03-0242ac130003', -0.2); +---- Creator: Julia Smith INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Suman Maroju VALUES ('b5596a80-fac3-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '1b4f99da-ef70-4a76-9b37-8bb783b749ad','18ef2032-c264-411e-a8e1-ddda9a714bae', '2021-02-15', '2021-02-25', '2021-02-20', 'submitted'); @@ -894,13 +1110,9 @@ INSERT INTO feedback_answers VALUES ('98e0c286-facd-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('I have few complaints except the aforementioned need to communicate more with the client', '${aeskey}'), '47f997ca-0045-4147-afcb-0c9ed0b44978', 'b5596a80-fac3-11eb-9a03-0242ac130003', 0.2); +---- Creator: Zack Brown INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -VALUES -('ab2da7fc-fac2-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3' ,'18ef2032-c264-411e-a8e1-ddda9a714bae', '2021-08-01', '2021-08-05', null, 'pending'); - -INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Zack Brown VALUES ('74623897-5279-4dbe-94d4-5a247d9f00b1', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'pending'); @@ -914,24 +1126,9 @@ INSERT INTO feedback_answers VALUES ('01565a0e-b8ea-486f-af2e-821a74519953', PGP_SYM_ENCRYPT('Excellent feedback', '${aeskey}'), '47f997ca-0045-4147-afcb-0c9ed0b44978', '74623897-5279-4dbe-94d4-5a247d9f00b1', 0.7); +---- Creator: Julia Smith INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -VALUES -('0d0d872d-4f05-4af8-9804-d0a99e450c37', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'pending'); - -INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -VALUES -('1aff4993-2324-41cc-8b21-2ab5715ca70b', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'pending'); - -INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -VALUES -('7ca4d402-0bb9-4989-9087-8a52a63ee5d0', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'pending'); - - -INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Unreal Ulysses, recipient: Zack Brown VALUES ('b1f60cfa-fac2-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '43ee8e79-b33d-44cd-b23c-e183894ebfef','18ef2032-c264-411e-a8e1-ddda9a714bae', '2021-07-22', '2021-07-31', '2021-07-29', 'submitted'); @@ -945,16 +1142,12 @@ INSERT INTO feedback_answers VALUES ('c38e5fba-face-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('They are very fun to work with :)', '${aeskey}'), '47f997ca-0045-4147-afcb-0c9ed0b44978', 'b1f60cfa-fac2-11eb-9a03-0242ac130003', 0.8); +---- Creator: Julia Smith INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Unreal Ulysses, recipient: Zack Brown VALUES ('e238dd00-fac4-11eb-9a03-0242ac130003', '59b790d2-fabc-11eb-9a03-0242ac130003', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '43ee8e79-b33d-44cd-b23c-e183894ebfef', '97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2021-03-22', '2021-04-01', '2021-04-01', 'submitted'); -INSERT INTO feedback_requests -(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -VALUES -('4240735d-15fd-4eea-8bca-8c642a433036', '59b790d2-fabc-11eb-9a03-0242ac130003', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '066b186f-1425-45de-89f2-4ddcc6ebe237', '97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2021-03-22', '2021-04-01', '2021-04-01', 'submitted'); - INSERT INTO feedback_answers (id, answer, question_id, request_id, sentiment) VALUES @@ -968,17 +1161,23 @@ VALUES INSERT INTO feedback_answers (id, answer, question_id, request_id, sentiment) VALUES -('d19e6ac1-f081-414c-a51a-ccc684131bec', PGP_SYM_ENCRYPT('They could definitely learn how to use Vim better. They keep asking me how to exit!', '${aeskey}'), '89c8b612-fca8-4144-88cd-176ddfca35ad', '4240735d-15fd-4eea-8bca-8c642a433036', 0.3); +('5a65fe6b-0f27-4d2c-bc25-a637bc33d630', PGP_SYM_ENCRYPT('Nothing comes to mind.', '${aeskey}'), '3571cf89-22b9-4e0e-baff-1a1e45482472', 'e238dd00-fac4-11eb-9a03-0242ac130003', 0.5); INSERT INTO feedback_answers (id, answer, question_id, request_id, sentiment) VALUES -('5a65fe6b-0f27-4d2c-bc25-a637bc33d630', PGP_SYM_ENCRYPT('Nothing comes to mind.', '${aeskey}'), '3571cf89-22b9-4e0e-baff-1a1e45482472', 'e238dd00-fac4-11eb-9a03-0242ac130003', 0.5); +('8c13ffa2-fad0-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('They are very good at working on a team--all of us is better than any one of us', '${aeskey}'), 'afa7e2cb-366a-4c16-a205-c0d493b80d85', 'e238dd00-fac4-11eb-9a03-0242ac130003', 0.8); + +---- Creator: Julia Smith +INSERT INTO feedback_requests +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Unreal Ulysses, recipient: Joe Warner +VALUES +('4240735d-15fd-4eea-8bca-8c642a433036', '59b790d2-fabc-11eb-9a03-0242ac130003', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '066b186f-1425-45de-89f2-4ddcc6ebe237', '97b0a312-e5dd-46f4-a600-d8be2ad925bb', '2021-03-22', '2021-04-01', '2021-04-01', 'submitted'); INSERT INTO feedback_answers (id, answer, question_id, request_id, sentiment) VALUES -('8c13ffa2-fad0-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('They are very good at working on a team--all of us is better than any one of us', '${aeskey}'), 'afa7e2cb-366a-4c16-a205-c0d493b80d85', 'e238dd00-fac4-11eb-9a03-0242ac130003', 0.8); +('d19e6ac1-f081-414c-a51a-ccc684131bec', PGP_SYM_ENCRYPT('They could definitely learn how to use Vim better. They keep asking me how to exit!', '${aeskey}'), '89c8b612-fca8-4144-88cd-176ddfca35ad', '4240735d-15fd-4eea-8bca-8c642a433036', 0.3); INSERT INTO feedback_answers (id, answer, question_id, request_id, sentiment) @@ -990,37 +1189,41 @@ INSERT INTO feedback_answers VALUES ('a223135a-742b-45c6-b9a4-2bb990d956b2', PGP_SYM_ENCRYPT('They are always punctual, and work well with the other members of the team. Although they have a few technical skills they could brush up on, our team is lucky to have them.', '${aeskey}'), 'afa7e2cb-366a-4c16-a205-c0d493b80d85', '4240735d-15fd-4eea-8bca-8c642a433036', 0.7); -INSERT INTO skills + +-- Skills +INSERT INTO skills -- React (id, name, pending, description, extraneous) VALUES ('f057af45-e627-499c-8a71-1e6b4ab2fcd2', 'React', false, 'Component-based JavaScript framework', false); -INSERT INTO skills +INSERT INTO skills -- Micronaut (id, name, pending, description, extraneous) VALUES ('689bb262-10af-40ef-bbf6-d8ad062e1470', 'Micronaut', false, 'JVM framework for microservices and serverless apps', false); -INSERT INTO skills +INSERT INTO skills -- CSS (id, name, pending, description, extraneous) VALUES ('6b56f0aa-09aa-4b09-bb81-03481af7e49f', 'CSS', true, 'Style sheet language', false); -INSERT INTO skills +INSERT INTO skills -- Git (id, name, pending, description, extraneous) VALUES ('84682de9-85a7-4bf7-b74b-e9054311a61a', 'Git', true, 'Version control system', false); -INSERT INTO member_skills + +-- Member Skills +INSERT INTO member_skills -- Big Boss, React (id, memberid, skillid, skilllevel, lastuseddate) VALUES ('99b7b700-bba3-440b-8df5-c1b668e9e7e0', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'f057af45-e627-499c-8a71-1e6b4ab2fcd2', '5', '2022-06-01'); -INSERT INTO member_skills +INSERT INTO member_skills -- Big Boss, (id, memberid, skillid, skilllevel, lastuseddate) VALUES ('daad16fa-2268-4e72-a2ad-e13aa8b8665b', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', '6b56f0aa-09aa-4b09-bb81-03481af7e49f', '4', '2022-06-01'); -INSERT INTO member_skills +INSERT INTO member_skills -- Revolver Ocelot, React (id, memberid, skillid, skilllevel, lastuseddate) VALUES ('e2de59a8-71be-4972-86be-608538503195', '105f2968-a182-45a3-892c-eeff76383fe0', 'f057af45-e627-499c-8a71-1e6b4ab2fcd2', '3', '2022-05-01'); \ No newline at end of file diff --git a/server/src/test/java/com/objectcomputing/checkins/services/action_item/ActionItemControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/action_item/ActionItemControllerTest.java index d86497f168..0c9c8b8c95 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/action_item/ActionItemControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/action_item/ActionItemControllerTest.java @@ -16,6 +16,8 @@ import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; + +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import jakarta.inject.Inject; @@ -34,6 +36,10 @@ class ActionItemControllerTest extends TestContainersSuite implements MemberProf @Client("/services/action-items") HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } @Test void testCreateAnActionItemByAdmin() { @@ -315,7 +321,6 @@ void testDeleteActionItemByMember() { void testDeleteAnActionItemByADMINIdWhenCompleted() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - createAndAssignAdminRole(memberProfileOfUser); CheckIn checkIn = createACompletedCheckIn(memberProfileOfPDL, memberProfileOfUser); @@ -481,7 +486,6 @@ void testFindActionItemsByAdmin() { void testFindAllActionItemsByAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForAdmin = createADefaultMemberProfileForPdl(memberProfile); - createAndAssignAdminRole(memberProfileForAdmin); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForAdmin); @@ -503,7 +507,7 @@ void testFindAllActionItemByNonAdmin() { CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); - ActionItem actionItem = createADefaultActionItem(checkIn, memberProfile); + createADefaultActionItem(checkIn, memberProfile); final HttpRequest request = HttpRequest.GET("/") .basicAuth(memberProfileForPDL.getWorkEmail(), MEMBER_ROLE); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemControllerTest.java index 65a4a2ac2a..58c58b7650 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemControllerTest.java @@ -8,7 +8,6 @@ import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; -import com.objectcomputing.checkins.services.role.RoleType; import io.micronaut.core.type.Argument; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -16,11 +15,11 @@ import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; + +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import jakarta.inject.Inject; -import org.reactivestreams.Publisher; -import reactor.test.StepVerifier; import java.util.*; import java.util.stream.Collectors; @@ -37,6 +36,10 @@ public class AgendaItemControllerTest extends TestContainersSuite implements Mem @Client("/services/agenda-items") HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } @Test void testCreateAgendaItemByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); @@ -311,7 +314,6 @@ void testReadAgendaItemNotFoundByUnrelatedUser() { void testFindAllAgendaItemByAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfile); - createAndAssignAdminRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileOfUser); @@ -372,7 +374,6 @@ void testFindAgendaItemByMemberIdForAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileForUnrelatedUser = createAnUnrelatedUser(); - createAndAssignRole(RoleType.ADMIN, memberProfileForUnrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -392,7 +393,6 @@ void testFindAgendaItemByCheckinIdForAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileForUnrelatedUser = createAnUnrelatedUser(); - createAndAssignRole(RoleType.ADMIN, memberProfileForUnrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -690,7 +690,6 @@ void testUpdateAgendaItemForUnrelatedUserByAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfMrNobody); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -754,7 +753,6 @@ void testDeleteAgendaItemByMember() { void testDeleteAAgendaItemByADMINIdWhenCompleted() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - createAndAssignAdminRole(memberProfileOfUser); CheckIn checkIn = createACompletedCheckIn(memberProfileOfPDL, memberProfileOfUser); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteControllerTest.java index 7b5ad4be9f..7f7caaeaeb 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/checkin_notes/CheckinNoteControllerTest.java @@ -17,6 +17,8 @@ import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; + +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import jakarta.inject.Inject; @@ -36,11 +38,15 @@ public class CheckinNoteControllerTest extends TestContainersSuite implements Me @Client("/services/checkin-notes") HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } @Test void testCreateCheckinNoteByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignAdminRole(memberProfileOfUser); + Role role = assignAdminRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfPDL, memberProfileOfUser); @@ -67,7 +73,7 @@ void testCreateCheckinNoteByAdmin() { void testCreateCheckinNoteByPdl() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfUser); + Role role = assignPdlRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfPDL, memberProfileOfUser); @@ -93,7 +99,7 @@ void testCreateCheckinNoteByPdl() { void testCreateCheckinNoteByMember() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfile); + Role role = assignMemberRole(memberProfile); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -157,7 +163,7 @@ void testCreateNullCheckinNote() { void testCreateACheckInNoteForNonExistingCheckInId() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfile); + Role role = assignPdlRole(memberProfile); CheckinNoteCreateDTO checkinNoteCreateDTO = new CheckinNoteCreateDTO(); checkinNoteCreateDTO.setCheckinid(UUID.randomUUID()); @@ -182,7 +188,7 @@ void testCreateACheckInNoteForNonExistingCheckInId() { void testCreateACheckInNoteForNonExistingMemberId() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfile); + Role role = assignPdlRole(memberProfile); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -209,7 +215,7 @@ void testCreateACheckInNoteForNonExistingMemberId() { void testCreateACheckInNoteByPLDIdWhenCompleted() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn checkIn = createACompletedCheckIn(memberProfileOfPDL, memberProfileOfUser); @@ -235,7 +241,7 @@ void testCreateACheckInNoteByPLDIdWhenCompleted() { void testCreateThrowsPermissionException() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createACompletedCheckIn(memberProfileOfPDL, memberProfileOfUser); @@ -262,7 +268,7 @@ void testCreateCheckinNoteByUnrelatedPDL() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role pdlRole = createAndAssignRole(RoleType.PDL, memberProfileOfMrNobody); + Role pdlRole = assignPdlRole(memberProfileOfMrNobody); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -288,9 +294,8 @@ void testCreateCheckinNoteByUnrelatedPDL() { @Test void testCreateCheckinNoteByPDLWhoCreatedIt() { MemberProfile memberProfile = createADefaultMemberProfile(); - MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileOfFormerPDL = createAnUnrelatedUser(); - Role pdlRole = createAndAssignRole(RoleType.PDL, memberProfileOfFormerPDL); + Role pdlRole = assignPdlRole(memberProfileOfFormerPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileOfFormerPDL); @@ -317,7 +322,7 @@ void testCreateCheckinNoteByPDLWhoCreatedIt() { void testReadCheckinNoteByPDL() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -335,7 +340,7 @@ void testReadCheckinNoteByPDL() { void testReadCheckinNoteByMEMBER() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileForPDL); + Role role = assignMemberRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -353,7 +358,7 @@ void testReadCheckinNoteByMEMBER() { void testReadCheckinNoteByAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.ADMIN, memberProfileForPDL); + Role role = assignAdminRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -372,7 +377,7 @@ void testReadCheckinNoteByPDLNotOnCheckin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileForFormerPDL = createASecondDefaultMemberProfileForPdl(memberProfile); - Role pdlRole = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role pdlRole = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForFormerPDL); @@ -394,7 +399,7 @@ void testReadCheckinNoteByPDLNotOnCheckin() { @Test void testReadCheckinNoteNotFound() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); - Role pdlRole = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role pdlRole = assignPdlRole(memberProfileOfPDL); UUID randomCheckinID = UUID.randomUUID(); @@ -416,7 +421,7 @@ void testReadCheckinNoteNotFoundByUnrelatedPDL() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role pdlRole = createAndAssignRole(RoleType.PDL, memberProfileOfMrNobody); + Role pdlRole = assignPdlRole(memberProfileOfMrNobody); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -439,7 +444,7 @@ void testReadCheckinNoteNotFoundByUnrelatedPDL() { void testReadCheckinNoteByFormerPDLWhoCreatedIt() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileOfFormerPDL = createAnUnrelatedUser(); - Role pdlRole = createAndAssignRole(RoleType.PDL, memberProfileOfFormerPDL); + Role pdlRole = assignPdlRole(memberProfileOfFormerPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileOfFormerPDL); @@ -458,7 +463,7 @@ void testReadCheckinNoteByFormerPDLWhoCreatedIt() { void testFindAllCheckinNoteByAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role pdlRole = createAndAssignRole(RoleType.ADMIN, memberProfileForPDL); + Role pdlRole = assignAdminRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -477,11 +482,11 @@ void testFindAllCheckinNoteByAdmin() { void testFindAllCheckinNoteByNonAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileForPDL); + Role role = assignMemberRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); - CheckinNote checkinNote = createADefaultCheckInNote(checkIn, memberProfile); + createADefaultCheckInNote(checkIn, memberProfile); final HttpRequest request = HttpRequest.GET("/") .basicAuth(memberProfileForPDL.getWorkEmail(), role.getRole()); @@ -500,7 +505,7 @@ void testFindAllCheckinNoteByNonAdmin() { void testFindCheckinNoteByBothCheckinIdAndCreateByid() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfile); + Role role = assignPdlRole(memberProfile); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -521,7 +526,7 @@ void testFindCheckinNoteByMemberIdForAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileForUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.ADMIN, memberProfileForUnrelatedUser); + Role role = assignAdminRole(memberProfileForUnrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -541,7 +546,7 @@ void testFindCheckinNoteByCheckinIdForAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileForUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.ADMIN, memberProfileForUnrelatedUser); + Role role = assignAdminRole(memberProfileForUnrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -560,7 +565,7 @@ void testFindCheckinNoteByCheckinIdForAdmin() { void testFindCheckinNoteByCheckinIdForPDL() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -580,7 +585,7 @@ void testFindCheckinNoteByCheckinIdForUnrelatedUser() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile unrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, unrelatedUser); + Role role = assignPdlRole(unrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -601,7 +606,7 @@ void testFindCheckinNoteByCheckinIdForUnrelatedUser() { void testFindCheckinNoteByCreatedByIdByMember() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -621,7 +626,7 @@ void testFindCheckinNoteByCreatedByIdByUnrelatedUser() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile anUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, anUnrelatedUser); + Role role = assignPdlRole(anUnrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -642,7 +647,7 @@ void testFindCheckinNoteByCreatedByIdByUnrelatedUser() { void testUpdateCheckinNoteByAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.ADMIN, memberProfileForPDL); + Role role = assignAdminRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -661,7 +666,7 @@ void testUpdateCheckinNoteByAdmin() { void testUpdateCheckinNoteByPDL() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -679,7 +684,7 @@ void testUpdateCheckinNoteByPDL() { void testUpdateCheckinNoteByMEMBER() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfile); + Role role = assignMemberRole(memberProfile); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -697,7 +702,7 @@ void testUpdateCheckinNoteByMEMBER() { void testUpdateInvalidCheckinNote() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -726,7 +731,7 @@ void testUpdateInvalidCheckinNote() { @Test void testUpdateNullCheckinNote() { MemberProfile memberProfile = createADefaultMemberProfile(); - Role role = createAndAssignRole(RoleType.PDL, memberProfile); + Role role = assignPdlRole(memberProfile); final HttpRequest request = HttpRequest.PUT("", "") .basicAuth("test@test.com", role.getRole()); @@ -759,7 +764,7 @@ void testUpdateUnAuthorized() { void testUpdateNonExistingCheckInNote() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -784,7 +789,7 @@ void testUpdateNonExistingCheckInNote() { void testUpdateNonExistingCheckInNoteForCheckInId() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -809,7 +814,7 @@ void testUpdateNonExistingCheckInNoteForCheckInId() { void testUpdateNonExistingCheckInNoteForMemberId() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); - Role role = createAndAssignRole(RoleType.PDL, memberProfileForPDL); + Role role = assignPdlRole(memberProfileForPDL); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -835,7 +840,7 @@ void testUpdateCheckInNoteForUnrelatedUserByPdlWhenCompleted() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfMrNobody); + Role role = assignPdlRole(memberProfileOfMrNobody); CheckIn checkIn = createACompletedCheckIn(memberProfile, memberProfileForPDL); @@ -860,7 +865,7 @@ void testUpdateCheckInNoteForUnrelatedUserByAdmin() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.ADMIN, memberProfileOfMrNobody); + Role role = assignAdminRole(memberProfileOfMrNobody); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); @@ -879,7 +884,7 @@ void testUpdateCheckInNoteForUnrelatedUserByAdmin() { void testUpdateThrowsPermissionException() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileForUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileForUser); + Role role = assignPdlRole(memberProfileForUser); CheckIn checkIn = createACompletedCheckIn(memberProfileForUser, memberProfileOfPDL); CheckinNote checkinNote = createADefaultCheckInNote(checkIn, memberProfileForUser); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/checkins/CheckInControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/checkins/CheckInControllerTest.java index 686c053f00..eb99df396e 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/checkins/CheckInControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/checkins/CheckInControllerTest.java @@ -15,6 +15,8 @@ import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; + +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import jakarta.inject.Inject; @@ -23,6 +25,7 @@ import java.util.stream.Collectors; import static com.objectcomputing.checkins.services.role.RoleType.Constants.*; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -33,11 +36,15 @@ public class CheckInControllerTest extends TestContainersSuite implements Member @Client("/services/check-ins") private HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } @Test public void testCreateACheckInByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignAdminRole(memberProfileOfUser); + Role role = assignAdminRole(memberProfileOfUser); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); checkInCreateDTO.setTeamMemberId(memberProfileOfUser.getId()); @@ -61,7 +68,7 @@ public void testCreateACheckInByAdmin() { public void testCreateACheckInByMember() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); checkInCreateDTO.setTeamMemberId(memberProfileOfUser.getId()); @@ -85,7 +92,7 @@ public void testCreateACheckInByMember() { public void testCreateACheckInByPDL() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); checkInCreateDTO.setTeamMemberId(memberProfileOfUser.getId()); @@ -110,7 +117,7 @@ public void testCreateACheckInByUnrelatedUser() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfMrNobody); + Role role = assignPdlRole(memberProfileOfMrNobody); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); checkInCreateDTO.setTeamMemberId(memberProfileOfUser.getId()); @@ -134,7 +141,7 @@ public void testCreateACheckInByUnrelatedUser() { void testCreateACheckInForSamePDLAndMember() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn existingCheckIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); @@ -160,7 +167,6 @@ void testCreateAnInvalidCheckIn() { CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); MemberProfile memberProfile = createADefaultMemberProfile(); - Role role = createAndAssignAdminRole(memberProfile); final HttpRequest request = HttpRequest.POST("", checkInCreateDTO).basicAuth(memberProfile.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, @@ -182,7 +188,7 @@ void testCreateAnInvalidCheckIn() { void testCreateCheckInForNonExistingMember() { MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfMrNobody); + Role role = assignMemberRole(memberProfileOfMrNobody); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); checkInCreateDTO.setTeamMemberId(UUID.randomUUID()); @@ -220,7 +226,7 @@ void testCreateANullCheckIn() { public void testCreateACheckInForInvalidPdlID() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); checkInCreateDTO.setTeamMemberId(memberProfileOfUser.getId()); @@ -244,7 +250,7 @@ public void testCreateACheckInForInvalidPdlID() { void testCreateACheckInForInvalidDate() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckInCreateDTO checkInCreateDTO = new CheckInCreateDTO(); checkInCreateDTO.setTeamMemberId(memberProfileOfUser.getId()); @@ -280,7 +286,7 @@ public void testGetReadByIdByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.ADMIN, memberProfileOfUser); + Role role = assignAdminRole(memberProfileOfUser); CheckIn expected = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -299,7 +305,7 @@ public void testGetReadByIdByPDL() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfUser); CheckIn expected = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -318,7 +324,7 @@ public void testGetReadByIdByMember() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn expected = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -337,7 +343,7 @@ public void testGetReadByIdByUnrelatedUser() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfMrNobody); + Role role = assignMemberRole(memberProfileOfMrNobody); CheckIn expected = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -357,7 +363,7 @@ public void testGetReadByIdByUnrelatedUser() { void testGetReadCheckInDoesNotExist() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); UUID randomCheckinID = UUID.randomUUID(); final HttpRequest request = HttpRequest.GET(String.format("/%s", randomCheckinID)).basicAuth(memberProfileOfPDL.getWorkEmail(), role.getRole()); @@ -376,7 +382,7 @@ void testGetReadCheckInDoesNotExist() { void testUpdateCheckInByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.ADMIN, memberProfileOfPDL); + Role role = assignAdminRole(memberProfileOfPDL); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -392,7 +398,7 @@ void testUpdateCheckInByAdmin() { void testUpdateCheckInByPDL() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -408,7 +414,7 @@ void testUpdateCheckInByPDL() { void testUpdateCheckInByMember() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -425,7 +431,7 @@ void testUpdateCheckInByUnrelatedUser() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfMrNobody = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfMrNobody); + Role role = assignPdlRole(memberProfileOfMrNobody); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -445,7 +451,7 @@ void testUpdateCheckInByUnrelatedUser() { void testUpdateNonExistingCheckIn() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); checkIn.setId(UUID.randomUUID()); @@ -467,7 +473,7 @@ void testUpdateNonExistingCheckIn() { void testUpdateNotExistingMemberCheckIn() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); checkIn.setTeamMemberId(UUID.randomUUID()); @@ -488,7 +494,7 @@ void testUpdateNotExistingMemberCheckIn() { void testUpdateNotMemberCheckInWithoutId() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); checkIn.setId(null); @@ -523,7 +529,7 @@ void testUpdateInvalidCheckIn() { MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createADefaultMemberProfileForPdl(memberProfile); MemberProfile unrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, unrelatedUser); + Role role = assignMemberRole(unrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfile, memberProfileForPDL); checkIn.setTeamMemberId(null); @@ -548,7 +554,7 @@ void testUpdateInvalidCheckIn() { @Test void testUpdateANullCheckIn() { MemberProfile unrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, unrelatedUser); + Role role = assignMemberRole(unrelatedUser); final HttpRequest request = HttpRequest.PUT("", "").basicAuth(unrelatedUser.getWorkEmail(), role.getRole()); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> client.toBlocking().exchange(request, Map.class)); @@ -566,7 +572,7 @@ void testUpdateANullCheckIn() { public void testUpdateACheckInForInvalidPdlID() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); checkIn.setPdlId(UUID.randomUUID()); @@ -587,7 +593,7 @@ public void testUpdateACheckInForInvalidPdlID() { void testUpdateInvalidDateCheckIn() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); checkIn.setCheckInDate(LocalDateTime.of(1965, 11, 12, 15, 56)); @@ -609,7 +615,7 @@ void testUpdateInvalidDateCheckIn() { void testCannotUpdateCheckInIfCompletedIsTrue() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn checkIn = createACompletedCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -627,7 +633,7 @@ void testCannotUpdateCheckInIfCompletedIsTrue() { void testCannotUpdateCheckIfCompletedIsTrueUnlessMadeByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignAdminRole(memberProfileOfPDL); + Role role = assignAdminRole(memberProfileOfPDL); CheckIn checkIn = createACompletedCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -644,7 +650,7 @@ public void testGetFindByTeamMemberIdByMember() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -659,7 +665,7 @@ public void testGetFindByTeamMemberIdByPdl() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -675,7 +681,7 @@ public void testGetFindByTeamMemberIdByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - Role role = createAndAssignAdminRole(memberProfileOfAdmin); + Role role = assignAdminRole(memberProfileOfAdmin); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -691,7 +697,7 @@ public void testGetFindByTeamMemberIdByUnrelatedUser() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUnrelatedUser); + Role role = assignMemberRole(memberProfileOfUnrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -710,7 +716,7 @@ public void testGetFindByPDLIdByMember() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -729,7 +735,7 @@ public void testGetFindByPDLIdByPDL() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -745,7 +751,7 @@ public void testGetFindByPDLIdByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - Role role = createAndAssignAdminRole(memberProfileOfAdmin); + Role role = assignAdminRole(memberProfileOfAdmin); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -761,7 +767,7 @@ public void testGetFindByPDLIdByUnrelatedUser() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfUnrelatedUser); + Role role = assignPdlRole(memberProfileOfUnrelatedUser); CheckIn checkIn = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -781,7 +787,7 @@ public void testGetFindByCompletedByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignAdminRole(memberProfileOfUnrelatedUser); + Role role = assignAdminRole(memberProfileOfUnrelatedUser); CheckIn checkIn1 = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); CheckIn checkIn2 = createACompletedCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -794,9 +800,15 @@ public void testGetFindByCompletedByAdmin() { expected.add(checkIn2); expected.add(checkIn3); + Set allCheckins = new HashSet<>(); + allCheckins.add(checkIn1); + allCheckins.add(checkIn2); + allCheckins.add(checkIn3); + assertEquals(HttpStatus.OK, response.getStatus()); assertEquals(expected.size(), response.body().size()); assertEquals(expected, response.body()); + assertNotEquals(allCheckins, response.body()); } @Test @@ -805,7 +817,7 @@ public void testGetFindByCompletedByMember() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUser); + Role role = assignMemberRole(memberProfileOfUser); CheckIn checkIn1 = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); CheckIn checkIn2 = createACompletedCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -817,6 +829,8 @@ public void testGetFindByCompletedByMember() { assertEquals(HttpStatus.OK, response.getStatus()); assertEquals(1, response.body().size()); assertEquals(checkIn2, response.body().iterator().next()); + assertNotEquals(checkIn1, response.body().iterator().next()); + assertNotEquals(checkIn3, response.body().iterator().next()); } @Test @@ -825,7 +839,7 @@ public void testGetFindByCompletedByPDL() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + Role role = assignPdlRole(memberProfileOfPDL); CheckIn checkIn1 = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); CheckIn checkIn2 = createACompletedCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -838,9 +852,15 @@ public void testGetFindByCompletedByPDL() { expected.add(checkIn2); expected.add(checkIn3); + Set allCheckins = new HashSet<>(); + allCheckins.add(checkIn1); + allCheckins.add(checkIn2); + allCheckins.add(checkIn3); + assertEquals(HttpStatus.OK, response.getStatus()); assertEquals(expected.size(), response.body().size()); assertEquals(expected, response.body()); + assertNotEquals(allCheckins, response.body()); } @Test @@ -849,7 +869,7 @@ void testFindAllCheckInsByAdmin() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignAdminRole(memberProfileOfUnrelatedUser); + Role role = assignAdminRole(memberProfileOfUnrelatedUser); CheckIn checkIn1 = createADefaultCheckIn(memberProfileOfUser, memberProfileOfPDL); CheckIn checkIn2 = createACompletedCheckIn(memberProfileOfUser, memberProfileOfPDL); @@ -872,7 +892,7 @@ void testFindAllCheckInsByAdmin() { void testFindAllCheckInsByMember() { MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUnrelatedUser); + Role role = assignMemberRole(memberProfileOfUnrelatedUser); final HttpRequest request = HttpRequest.GET(String.format("/")).basicAuth(memberProfileOfUnrelatedUser.getWorkEmail(), role.getRole()); @@ -889,7 +909,7 @@ void testFindAllCheckInsByMember() { void testFindAllCheckInsByPDL() { MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfUnrelatedUser); + Role role = assignPdlRole(memberProfileOfUnrelatedUser); final HttpRequest request = HttpRequest.GET(String.format("/")).basicAuth(memberProfileOfUnrelatedUser.getWorkEmail(), role.getRole()); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, @@ -905,7 +925,7 @@ void testFindAllCheckInsByPDL() { void testCheckInDoesNotExistForTeamMemberID() { MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUnrelatedUser); + Role role = assignMemberRole(memberProfileOfUnrelatedUser); final HttpRequest request = HttpRequest.GET(String.format("/?teamMemberId=%s", memberProfileOfUnrelatedUser.getId())).basicAuth(memberProfileOfUnrelatedUser.getWorkEmail(), role.getRole()); HttpResponse> response = client.toBlocking().exchange(request, Argument.setOf(CheckIn.class)); @@ -918,7 +938,7 @@ void testCheckInDoesNotExistForTeamMemberID() { void testCheckInDoesNotExistForPdlId() { MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.PDL, memberProfileOfUnrelatedUser); + Role role = assignPdlRole(memberProfileOfUnrelatedUser); final HttpRequest request = HttpRequest.GET(String.format("/?pdlId=%s", memberProfileOfUnrelatedUser.getId())).basicAuth(memberProfileOfUnrelatedUser.getWorkEmail(), role.getRole()); HttpResponse> response = client.toBlocking().exchange(request, Argument.setOf(CheckIn.class)); @@ -931,7 +951,7 @@ void testCheckInDoesNotExistForPdlId() { public void testCheckInDoesNotExistForCompleted() { MemberProfile memberProfileOfUnrelatedUser = createAnUnrelatedUser(); - Role role = createAndAssignRole(RoleType.MEMBER, memberProfileOfUnrelatedUser); + Role role = assignMemberRole(memberProfileOfUnrelatedUser); final HttpRequest request = HttpRequest.GET(String.format("/?completed=%s", true)).basicAuth(memberProfileOfUnrelatedUser.getWorkEmail(), role.getRole()); final HttpResponse> response = client.toBlocking().exchange(request, Argument.setOf(CheckIn.class)); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java index 44c6e19a01..7a8bbcc738 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java @@ -11,31 +11,46 @@ public interface PermissionFixture extends RepositoryFixture, RolePermissionFixt // Add MEMBER Permissions here List memberPermissions = List.of( - Permissions.CAN_VIEW_FEEDBACK_REQUEST, - Permissions.CAN_DELETE_FEEDBACK_REQUEST, - Permissions.CAN_VIEW_FEEDBACK_ANSWER, - Permissions.CAN_VIEW_PERMISSIONS + Permissions.CAN_VIEW_FEEDBACK_REQUEST, + Permissions.CAN_CREATE_FEEDBACK_REQUEST, + Permissions.CAN_DELETE_FEEDBACK_REQUEST, + Permissions.CAN_VIEW_FEEDBACK_ANSWER, + Permissions.CAN_VIEW_PERMISSIONS, + Permissions.CAN_VIEW_CHECKINS, + Permissions.CAN_CREATE_CHECKINS, + Permissions.CAN_UPDATE_CHECKINS ); // Add PDL Permissions here List pdlPermissions = List.of( - Permissions.CAN_VIEW_FEEDBACK_REQUEST, - Permissions.CAN_CREATE_FEEDBACK_REQUEST, - Permissions.CAN_DELETE_FEEDBACK_REQUEST, - Permissions.CAN_VIEW_FEEDBACK_ANSWER, - Permissions.CAN_VIEW_PERMISSIONS + Permissions.CAN_VIEW_FEEDBACK_REQUEST, + Permissions.CAN_CREATE_FEEDBACK_REQUEST, + Permissions.CAN_DELETE_FEEDBACK_REQUEST, + Permissions.CAN_VIEW_FEEDBACK_ANSWER, + Permissions.CAN_VIEW_PERMISSIONS, + Permissions.CAN_VIEW_CHECKINS, + Permissions.CAN_CREATE_CHECKINS, + Permissions.CAN_UPDATE_CHECKINS ); // Add ADMIN Permissions here List adminPermissions = List.of( - Permissions.CAN_VIEW_FEEDBACK_REQUEST, - Permissions.CAN_CREATE_FEEDBACK_REQUEST, - Permissions.CAN_DELETE_FEEDBACK_REQUEST, - Permissions.CAN_VIEW_FEEDBACK_ANSWER, - Permissions.CAN_DELETE_ORGANIZATION_MEMBERS, - Permissions.CAN_CREATE_ORGANIZATION_MEMBERS, - Permissions.CAN_VIEW_ROLE_PERMISSIONS, - Permissions.CAN_VIEW_PERMISSIONS + Permissions.CAN_VIEW_FEEDBACK_REQUEST, + Permissions.CAN_CREATE_FEEDBACK_REQUEST, + Permissions.CAN_DELETE_FEEDBACK_REQUEST, + Permissions.CAN_VIEW_FEEDBACK_ANSWER, + Permissions.CAN_DELETE_ORGANIZATION_MEMBERS, + Permissions.CAN_CREATE_ORGANIZATION_MEMBERS, + Permissions.CAN_VIEW_ROLE_PERMISSIONS, + Permissions.CAN_VIEW_PERMISSIONS, + Permissions.CAN_VIEW_SKILLS_REPORT, + Permissions.CAN_VIEW_RETENTION_REPORT, + Permissions.CAN_VIEW_ANNIVERSARY_REPORT, + Permissions.CAN_VIEW_BIRTHDAY_REPORT, + Permissions.CAN_VIEW_PROFILE_REPORT, + Permissions.CAN_CREATE_CHECKINS, + Permissions.CAN_VIEW_CHECKINS, + Permissions.CAN_UPDATE_CHECKINS ); default Permission createACustomPermission(Permissions perm) { diff --git a/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportControllerTest.java index cdf50e1dde..667c4bb572 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportControllerTest.java @@ -1,8 +1,15 @@ package com.objectcomputing.checkins.services.member_skill.skillsreport; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.objectcomputing.checkins.services.TestContainersSuite; import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; import com.objectcomputing.checkins.services.fixture.MemberSkillFixture; +import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.fixture.SkillFixture; import com.objectcomputing.checkins.services.member_skill.MemberSkill; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; @@ -13,24 +20,34 @@ import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; -import org.junit.jupiter.api.Test; - import jakarta.inject.Inject; import java.time.LocalDate; -import java.util.*; - -import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; -import static org.junit.jupiter.api.Assertions.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class SkillsReportControllerTest extends TestContainersSuite - implements MemberSkillFixture, MemberProfileFixture, SkillFixture { + implements MemberSkillFixture, MemberProfileFixture, SkillFixture, RoleFixture { @Inject @Client("/reports/skills") HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } + @Test void testValidRequestNonEmptyResponse() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + final MemberProfile memberProfile = createADefaultMemberProfile(); final Skill skill = createADefaultSkill(); final MemberSkill memberSkill = createMemberSkill(memberProfile, skill, SkillLevel.ADVANCED_LEVEL, LocalDate.now()); @@ -44,7 +61,7 @@ void testValidRequestNonEmptyResponse() { skillsReportRequestDTO.setSkills(skillLevelDTOList); final HttpRequest request = HttpRequest.POST("", skillsReportRequestDTO) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE); final HttpResponse response = client.toBlocking() .exchange(request, SkillsReportResponseDTO.class); @@ -62,6 +79,9 @@ void testValidRequestNonEmptyResponse() { @Test void testValidRequestEmptyResponse() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + final MemberProfile memberProfile = createADefaultMemberProfile(); final Skill skill = createADefaultSkill(); createMemberSkill(memberProfile, skill, SkillLevel.INTERMEDIATE_LEVEL, null); @@ -75,7 +95,7 @@ void testValidRequestEmptyResponse() { skillsReportRequestDTO.setSkills(skillLevelDTOList); final HttpRequest request = HttpRequest.POST("", skillsReportRequestDTO) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE); final HttpResponse response = client.toBlocking() .exchange(request, SkillsReportResponseDTO.class); @@ -88,6 +108,9 @@ void testValidRequestEmptyResponse() { @Test void testInvalidRequestSkillNotExist() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + final SkillsReportRequestDTO skillsReportRequestDTO = new SkillsReportRequestDTO(); final List skillLevelDTOList = new ArrayList<>(); final SkillLevelDTO skillLevelDTO = new SkillLevelDTO(); @@ -98,7 +121,7 @@ void testInvalidRequestSkillNotExist() { skillsReportRequestDTO.setSkills(skillLevelDTOList); final HttpRequest request = HttpRequest.POST("", skillsReportRequestDTO) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> client.toBlocking().exchange(request, Map.class)); @@ -107,6 +130,9 @@ void testInvalidRequestSkillNotExist() { @Test void testInvalidRequestMemberProfileNotExist() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + final Skill skill = createADefaultSkill(); final SkillsReportRequestDTO skillsReportRequestDTO = new SkillsReportRequestDTO(); @@ -121,10 +147,34 @@ void testInvalidRequestMemberProfileNotExist() { skillsReportRequestDTO.setMembers(members); final HttpRequest request = HttpRequest.POST("", skillsReportRequestDTO) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> client.toBlocking().exchange(request, Map.class)); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); } + + @Test + void testInvalidRequestMemberDoesntHavePermissions() { + final Skill skill = createADefaultSkill(); + + final SkillsReportRequestDTO skillsReportRequestDTO = new SkillsReportRequestDTO(); + final List skillLevelDTOList = new ArrayList<>(); + final SkillLevelDTO skillLevelDTO = new SkillLevelDTO(); + skillLevelDTO.setId(skill.getId()); + skillLevelDTOList.add(skillLevelDTO); + skillsReportRequestDTO.setSkills(skillLevelDTOList); + final Set members = new HashSet<>(); + final UUID memberId = UUID.randomUUID(); + members.add(memberId); + skillsReportRequestDTO.setMembers(members); + + final HttpRequest request = HttpRequest.POST("", skillsReportRequestDTO) + .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, + () -> client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.FORBIDDEN, responseException.getStatus()); + } + } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileControllerTest.java index 5f4933a110..cc194ea4d0 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/MemberProfileControllerTest.java @@ -1,8 +1,24 @@ package com.objectcomputing.checkins.services.memberprofile; +import static com.objectcomputing.checkins.services.memberprofile.MemberProfileTestUtil.assertProfilesEqual; +import static com.objectcomputing.checkins.services.memberprofile.MemberProfileTestUtil.mkCreateMemberProfileDTO; +import static com.objectcomputing.checkins.services.memberprofile.MemberProfileTestUtil.mkUpdateMemberProfileDTO; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.PDL_ROLE; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.fasterxml.jackson.databind.JsonNode; import com.objectcomputing.checkins.services.TestContainersSuite; -import com.objectcomputing.checkins.services.fixture.*; +import com.objectcomputing.checkins.services.fixture.CheckInFixture; +import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; +import com.objectcomputing.checkins.services.fixture.MemberSkillFixture; +import com.objectcomputing.checkins.services.fixture.RoleFixture; +import com.objectcomputing.checkins.services.fixture.SkillFixture; +import com.objectcomputing.checkins.services.fixture.TeamFixture; +import com.objectcomputing.checkins.services.fixture.TeamMemberFixture; import com.objectcomputing.checkins.services.role.RoleType; import com.objectcomputing.checkins.services.skills.Skill; import com.objectcomputing.checkins.services.team.Team; @@ -14,24 +30,21 @@ import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; import io.micronaut.http.hateoas.Resource; -import org.junit.jupiter.api.Test; - import jakarta.inject.Inject; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; -import java.util.*; - -import static com.objectcomputing.checkins.services.memberprofile.MemberProfileTestUtil.*; -import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; -import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; -import static org.junit.Assert.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class MemberProfileControllerTest extends TestContainersSuite implements MemberProfileFixture, CheckInFixture, - SkillFixture, MemberSkillFixture, TeamFixture, TeamMemberFixture, RoleFixture { + SkillFixture, MemberSkillFixture, TeamFixture, TeamMemberFixture, RoleFixture { @Inject @Client("/services/member-profiles") @@ -49,12 +62,17 @@ private String encodeValue(String value) throws UnsupportedEncodingException { return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); } + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } + @Test public void testGETNonExistingEndpointReturns404() { HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, () -> { client.toBlocking().exchange(HttpRequest.GET(String.valueOf(UUID.randomUUID())) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE)); + .basicAuth(MEMBER_ROLE, MEMBER_ROLE)); }); assertNotNull(thrown.getResponse()); @@ -65,13 +83,14 @@ public void testGETNonExistingEndpointReturns404() { public void testDeleteThrowsExceptionWhenUserDoesNotExist() { MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); +// createAndAssignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.DELETE("/01b7d769-9fa2-43ff-95c7-f3b950a27bf9") - .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); + .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); JsonNode body = responseException.getResponse().getBody(JsonNode.class).orElse(null); String error = Objects.requireNonNull(body).get("message").asText(); @@ -90,18 +109,19 @@ public void testDeleteThrowsExceptionIfCheckinDataExists() { createADefaultCheckIn(memberProfileOfMember, memberProfileOfPDL); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); +// createAndAssignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.DELETE(memberProfileOfMember.getId().toString()) - .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); + .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request)); + () -> client.toBlocking().exchange(request)); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); assertEquals( - String.format("User %s cannot be deleted since Checkin record(s) exist", MemberProfileUtils.getFullName(memberProfileOfMember)), - responseException.getMessage() + String.format("User %s cannot be deleted since Checkin record(s) exist", MemberProfileUtils.getFullName(memberProfileOfMember)), + responseException.getMessage() ); } @@ -115,18 +135,19 @@ public void testDeleteThrowsExceptionIfMemberSkillExists() { createMemberSkill(memberProfileOfMember, testSkill, "Pro", LocalDate.now()); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); +// createAndAssignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.DELETE(memberProfileOfMember.getId().toString()) - .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); + .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request)); + () -> client.toBlocking().exchange(request)); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); assertEquals( - String.format("User %s cannot be deleted since MemberSkill record(s) exist", MemberProfileUtils.getFullName(memberProfileOfMember)), - responseException.getMessage() + String.format("User %s cannot be deleted since MemberSkill record(s) exist", MemberProfileUtils.getFullName(memberProfileOfMember)), + responseException.getMessage() ); } @@ -140,18 +161,19 @@ public void testDeleteThrowsExceptionIfMemberIsPartOfATeam() { createDefaultTeamMember(testTeam, memberProfileOfMember); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); +// createAndAssignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.DELETE(memberProfileOfMember.getId().toString()) - .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); + .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request)); + () -> client.toBlocking().exchange(request)); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); assertEquals( - String.format("User %s cannot be deleted since TeamMember record(s) exist", MemberProfileUtils.getFullName(memberProfileOfMember)), - responseException.getMessage() + String.format("User %s cannot be deleted since TeamMember record(s) exist", MemberProfileUtils.getFullName(memberProfileOfMember)), + responseException.getMessage() ); } @@ -159,22 +181,23 @@ public void testDeleteThrowsExceptionIfMemberIsPartOfATeam() { public void testDeleteThrowsExceptionIfMemberHasPDLRole() { MemberProfile memberProfileOfPDL = createADefaultMemberProfile(); - - createAndAssignRole(RoleType.PDL, memberProfileOfPDL); + assignPdlRole(memberProfileOfPDL); +// createAndAssignRole(RoleType.PDL, memberProfileOfPDL); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); +// createAndAssignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.DELETE(memberProfileOfPDL.getId().toString()) - .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); + .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request)); + () -> client.toBlocking().exchange(request)); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); assertEquals( - String.format("User %s cannot be deleted since user has PDL role", MemberProfileUtils.getFullName(memberProfileOfPDL)), - responseException.getMessage() + String.format("User %s cannot be deleted since user has PDL role", MemberProfileUtils.getFullName(memberProfileOfPDL)), + responseException.getMessage() ); } @@ -185,20 +208,21 @@ public void testDeleteHappyPath() { MemberProfile memberProfileOfMember = createADefaultMemberProfileForPdl(memberProfileOfPDL); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); +// createAndAssignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.DELETE(memberProfileOfMember.getId().toString()) - .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); + .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); final HttpResponse response = client.toBlocking().exchange(request); assertEquals(HttpStatus.OK, response.getStatus()); // Ensure profile is Deleted and not Terminated final HttpRequest requestForAssertingDeletion = HttpRequest.GET(String.format("/%s", memberProfileOfMember.getId())) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(MEMBER_ROLE, MEMBER_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(requestForAssertingDeletion, Map.class)); + () -> client.toBlocking().exchange(requestForAssertingDeletion, Map.class)); JsonNode body = responseException.getResponse().getBody(JsonNode.class).orElse(null); String error = Objects.requireNonNull(body).get("message").asText(); @@ -211,11 +235,23 @@ public void testDeleteHappyPath() { @Test public void testDeleteNotAuthorized() { + final HttpRequest request = HttpRequest.DELETE("/01b7d769-9fa2-43ff-95c7-f3b950a27bf9") + .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, + () -> client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.FORBIDDEN, thrown.getStatus()); + } + + @Test + public void testDeleteNoPermission() { + MemberProfile pdlMember = createAnUnrelatedUser(); + assignPdlRole(pdlMember); final HttpRequest request = HttpRequest.DELETE("/01b7d769-9fa2-43ff-95c7-f3b950a27bf9") - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(pdlMember.getWorkEmail(), PDL_ROLE); HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); assertEquals(HttpStatus.FORBIDDEN, thrown.getStatus()); } @@ -225,7 +261,7 @@ public void testDeleteNotAuthorized() { public void testGETFindByNameReturnsEmptyBody() throws UnsupportedEncodingException { final HttpRequest request = HttpRequest. - GET(String.format("/?name=%s", encodeValue("dnc"))).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + GET(String.format("/?name=%s", encodeValue("dnc"))).basicAuth(MEMBER_ROLE, MEMBER_ROLE); final HttpResponse> response = client.toBlocking().exchange(request, Argument.setOf(MemberProfile.class)); @@ -237,7 +273,7 @@ public void testGETFindByValueName() throws UnsupportedEncodingException { MemberProfile memberProfile = createADefaultMemberProfile(); final HttpRequest request = HttpRequest. - GET(String.format("/?firstName=%s", encodeValue(memberProfile.getFirstName()))).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + GET(String.format("/?firstName=%s", encodeValue(memberProfile.getFirstName()))).basicAuth(MEMBER_ROLE, MEMBER_ROLE); final HttpResponse> response = client.toBlocking().exchange(request, Argument.setOf(MemberProfile.class)); @@ -251,7 +287,7 @@ public void testGETGetByIdHappyPath() { MemberProfile memberProfile = createADefaultMemberProfile(); final HttpRequest request = HttpRequest. - GET(String.format("/%s", memberProfile.getId())).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + GET(String.format("/%s", memberProfile.getId())).basicAuth(MEMBER_ROLE, MEMBER_ROLE); final HttpResponse response = client.toBlocking().exchange(request, MemberProfile.class); @@ -263,10 +299,10 @@ public void testGETGetByIdHappyPath() { public void testGETGetByIdNotFound() { final HttpRequest request = HttpRequest. - GET(String.format("/%s", UUID.randomUUID().toString())).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + GET(String.format("/%s", UUID.randomUUID().toString())).basicAuth(MEMBER_ROLE, MEMBER_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); assertNotNull(responseException.getResponse()); assertEquals(HttpStatus.NOT_FOUND, responseException.getStatus()); @@ -277,7 +313,7 @@ void testFindByMemberName() throws UnsupportedEncodingException { MemberProfile memberProfile = createADefaultMemberProfile(); final HttpRequest request = HttpRequest.GET(String.format("/?firstName=%s", encodeValue(memberProfile.getFirstName()))) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(MEMBER_ROLE, MEMBER_ROLE); final HttpResponse> response = client.toBlocking().exchange(request, Argument.setOf(MemberProfile.class)); assertEquals(Set.of(memberProfile), response.body()); @@ -313,7 +349,7 @@ void testFindBySupervisorId() { MemberProfile memberProfileOfUser = createADefaultMemberProfileForPdl(memberProfileOfPdl); final HttpRequest request = HttpRequest.GET(String.format("/?supervisorId=%s", memberProfileOfUser.getSupervisorid())) - .basicAuth(memberProfileOfUser.getWorkEmail(), MEMBER_ROLE); + .basicAuth(memberProfileOfUser.getWorkEmail(), MEMBER_ROLE); final HttpResponse> response = client.toBlocking().exchange(request, Argument.setOf(MemberProfile.class)); assertEquals(Set.of(memberProfileOfUser), response.body()); @@ -321,12 +357,15 @@ void testFindBySupervisorId() { } @Test - public void testPOSTCreateAMemberProfile() { + public void testPOSTCreateAMemberProfileAdmin() { + + MemberProfile admin = createADefaultMemberProfile(); + assignAdminRole(admin); MemberProfileUpdateDTO dto = mkUpdateMemberProfileDTO(); final HttpRequest request = HttpRequest. - POST("/", dto).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + POST("/", dto).basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); final HttpResponse response = client.toBlocking().exchange(request, MemberProfile.class); assertNotNull(response); @@ -335,15 +374,54 @@ public void testPOSTCreateAMemberProfile() { assertEquals(String.format("%s/%s", request.getPath(), response.body().getId()), "/services" + response.getHeaders().get("location")); } + @Test + public void testPOSTCreateAMemberProfileMemberUnauthorized() { + + MemberProfile member = createADefaultMemberProfile(); + assignMemberRole(member); + + MemberProfileUpdateDTO dto = mkUpdateMemberProfileDTO(); + + final HttpRequest request = HttpRequest. + POST("/", dto).basicAuth(member.getWorkEmail(), MEMBER_ROLE); + final HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, + () -> client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(exception); + } + + @Test + public void testPOSTCreateAMemberProfilePdlUnauthorized() { + + MemberProfile pdl = createADefaultMemberProfile(); + assignPdlRole(pdl); + + MemberProfileUpdateDTO dto = mkUpdateMemberProfileDTO(); + + final HttpRequest request = HttpRequest. + POST("/", dto).basicAuth(pdl.getWorkEmail(), PDL_ROLE); + final HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, + () -> client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(exception); + } + + public void assertUnauthorized(HttpClientResponseException exception) { + assertEquals("Forbidden", exception.getMessage()); + assertEquals(HttpStatus.FORBIDDEN, exception.getStatus()); + } + @Test public void testPOSTCreateANullMemberProfile() { + MemberProfile admin = createADefaultMemberProfile(); + assignAdminRole(admin); MemberProfileCreateDTO memberProfileCreateDTO = new MemberProfileCreateDTO(); final HttpRequest request = HttpRequest. - POST("/", memberProfileCreateDTO).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + POST("/", memberProfileCreateDTO).basicAuth(admin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); assertNotNull(responseException.getResponse()); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); @@ -352,11 +430,13 @@ public void testPOSTCreateANullMemberProfile() { // Find By id - when no user data exists for POST @Test public void testPostValidationFailures() { + MemberProfile admin = createADefaultMemberProfile(); + assignAdminRole(admin); final HttpRequest request = HttpRequest.POST("", new MemberProfileCreateDTO()) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(admin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); JsonNode body = thrown.getResponse().getBody(JsonNode.class).orElse(null); JsonNode errors = Objects.requireNonNull(body).get(Resource.EMBEDDED).get("errors"); @@ -367,10 +447,13 @@ public void testPostValidationFailures() { @Test public void testPOSTSaveMemberSameEmailThrowsException() { + MemberProfile admin = createADefaultMemberProfile(); + assignAdminRole(admin); + // create a user MemberProfileUpdateDTO firstUser = mkUpdateMemberProfileDTO(); - final HttpRequest requestFirstUser = HttpRequest.POST("/", firstUser).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + final HttpRequest requestFirstUser = HttpRequest.POST("/", firstUser).basicAuth(admin.getWorkEmail(), ADMIN_ROLE); final HttpResponse responseFirstUser = client.toBlocking().exchange(requestFirstUser, MemberProfile.class); assertNotNull(responseFirstUser); @@ -378,10 +461,10 @@ public void testPOSTSaveMemberSameEmailThrowsException() { // create another user with same email address MemberProfileUpdateDTO secondUser = mkUpdateMemberProfileDTO(); - final HttpRequest requestSecondUser = HttpRequest.POST("/", secondUser).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + final HttpRequest requestSecondUser = HttpRequest.POST("/", secondUser).basicAuth(admin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(requestSecondUser, Map.class)); + () -> client.toBlocking().exchange(requestSecondUser, Map.class)); JsonNode body = responseException.getResponse().getBody(JsonNode.class).orElse(null); String error = Objects.requireNonNull(body).get("message").asText(); @@ -398,7 +481,7 @@ public void testPUTUpdateMemberProfile() { MemberProfileUpdateDTO profileUpdateDTO = mkUpdateMemberProfileDTO(); final HttpRequest request = HttpRequest.PUT("/", profileUpdateDTO) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(MEMBER_ROLE, MEMBER_ROLE); final HttpResponse response = client.toBlocking().exchange(request, MemberProfileResponseDTO.class); assertProfilesEqual(profileUpdateDTO, response.body()); @@ -414,9 +497,9 @@ public void testPUTUpdateNonexistentMemberProfile() { memberProfileCreateDTO.setLastName("gentleman"); final HttpRequest request = HttpRequest. - PUT("/", memberProfileCreateDTO).basicAuth(MEMBER_ROLE, MEMBER_ROLE); + PUT("/", memberProfileCreateDTO).basicAuth(MEMBER_ROLE, MEMBER_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); assertNotNull(responseException.getResponse()); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); @@ -427,7 +510,7 @@ public void testPUTUpdateNullMemberProfile() { final HttpRequest request = HttpRequest.PUT("", "").basicAuth(MEMBER_ROLE, MEMBER_ROLE); HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); assertNotNull(responseException.getResponse()); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); @@ -436,13 +519,16 @@ public void testPUTUpdateNullMemberProfile() { // POST - Future Start Date @Test public void testPostForFutureStartDate() { + MemberProfile admin = createADefaultMemberProfile(); + assignAdminRole(admin); + MemberProfileCreateDTO requestBody = mkCreateMemberProfileDTO(); requestBody.setStartDate(maxDate); final HttpResponse response = client - .toBlocking() - .exchange(HttpRequest.POST("", requestBody) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE), MemberProfileResponseDTO.class); + .toBlocking() + .exchange(HttpRequest.POST("", requestBody) + .basicAuth(admin.getWorkEmail(), ADMIN_ROLE), MemberProfileResponseDTO.class); assertEquals(HttpStatus.CREATED, response.getStatus()); assertNotNull(response.body()); @@ -453,14 +539,16 @@ public void testPostForFutureStartDate() { // POST - NotBlank MemberProfile first name (and last name) @Test public void testPostWithNullName() { + MemberProfile admin = createADefaultMemberProfile(); + assignAdminRole(admin); MemberProfileCreateDTO requestBody = mkCreateMemberProfileDTO(); requestBody.setFirstName(null); final HttpRequest request = HttpRequest.POST("", requestBody) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(admin.getWorkEmail(), ADMIN_ROLE); HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); assertEquals(HttpStatus.BAD_REQUEST, exception.getStatus()); } @@ -470,9 +558,9 @@ public void testPostWithNullName() { public void testPutValidationFailures() { final HttpRequest request = HttpRequest.PUT("", new MemberProfileUpdateDTO()) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE); + .basicAuth(MEMBER_ROLE, MEMBER_ROLE); HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, - () -> client.toBlocking().exchange(request, Map.class)); + () -> client.toBlocking().exchange(request, Map.class)); JsonNode body = thrown.getResponse().getBody(JsonNode.class).orElse(null); JsonNode errors = Objects.requireNonNull(body).get(Resource.EMBEDDED).get("errors"); @@ -489,9 +577,9 @@ public void testPutFutureStartDate() { requestBody.setStartDate(maxDate); final HttpResponse response = client - .toBlocking() - .exchange(HttpRequest.PUT("", requestBody) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE), MemberProfileResponseDTO.class); + .toBlocking() + .exchange(HttpRequest.PUT("", requestBody) + .basicAuth(MEMBER_ROLE, MEMBER_ROLE), MemberProfileResponseDTO.class); assertEquals(HttpStatus.OK, response.getStatus()); assertProfilesEqual(requestBody, Objects.requireNonNull(response.body())); @@ -503,7 +591,7 @@ public void testPutUpdateForEmptyInput() { MemberProfileUpdateDTO testMemberProfile = mkUpdateMemberProfileDTO(); testMemberProfile.setId(null); HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, () -> client.toBlocking().exchange(HttpRequest.PUT("", testMemberProfile) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE))); + .basicAuth(MEMBER_ROLE, MEMBER_ROLE))); JsonNode body = thrown.getResponse().getBody(JsonNode.class).orElse(null); JsonNode error = Objects.requireNonNull(body).get("_embedded").get("errors").get(0).get("message"); assertEquals("memberProfile.id: must not be null", error.asText()); @@ -514,8 +602,8 @@ public void testPutUpdateForEmptyInput() { public void testMemberProfileWithNullTerminationDate() { MemberProfile memberProfile = createADefaultMemberProfile(); final HttpResponse> response = client - .toBlocking() - .exchange(HttpRequest.GET("").basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); + .toBlocking() + .exchange(HttpRequest.GET("").basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); assertEquals(HttpStatus.OK, response.getStatus()); assertEquals(1, response.body().size()); @@ -527,8 +615,8 @@ public void testMemberProfileWithUpcomingTerminationDate() { MemberProfile memberProfile = createAFutureTerminatedMemberProfile(); final HttpResponse> response = client - .toBlocking() - .exchange(HttpRequest.GET("").basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); + .toBlocking() + .exchange(HttpRequest.GET("").basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); assertEquals(HttpStatus.OK, response.getStatus()); assertEquals(1, response.body().size()); @@ -540,8 +628,8 @@ public void testMemberProfileWithPreviousTerminationDate() { MemberProfile memberProfile = createAPastTerminatedMemberProfile(); final HttpResponse> response = client - .toBlocking() - .exchange(HttpRequest.GET("").basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); + .toBlocking() + .exchange(HttpRequest.GET("").basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); assertEquals(HttpStatus.OK, response.getStatus()); assertEquals(0, response.body().size()); @@ -552,8 +640,8 @@ public void testMemberProfileWithPreviousTerminationDateReturnsWhenTerminatedTru MemberProfile memberProfile = createAPastTerminatedMemberProfile(); final HttpResponse> response = client - .toBlocking() - .exchange(HttpRequest.GET("/?terminated=true").basicAuth(ADMIN_ROLE, ADMIN_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); + .toBlocking() + .exchange(HttpRequest.GET("/?terminated=true").basicAuth(ADMIN_ROLE, ADMIN_ROLE), Argument.listOf(MemberProfileResponseDTO.class)); assertEquals(HttpStatus.OK, response.getStatus()); assertEquals(1, response.body().size()); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportControllerTest.java index 187eb24f2f..d70244818e 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/anniversaryreport/AnniversaryReportControllerTest.java @@ -1,10 +1,14 @@ package com.objectcomputing.checkins.services.memberprofile.anniversaryreport; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.objectcomputing.checkins.services.TestContainersSuite; import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; -import com.objectcomputing.checkins.services.role.RoleType; import io.micronaut.core.type.Argument; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -12,19 +16,14 @@ import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; -import org.junit.jupiter.api.Test; - import jakarta.inject.Inject; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; - -import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; -import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class AnniversaryReportControllerTest extends TestContainersSuite implements MemberProfileFixture, RoleFixture { @@ -32,6 +31,11 @@ public class AnniversaryReportControllerTest extends TestContainersSuite impleme @Client("/services/reports/anniversaries") private HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } + private String encodeValue(String value) throws UnsupportedEncodingException { return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); } @@ -39,7 +43,7 @@ private String encodeValue(String value) throws UnsupportedEncodingException { @Test public void testGETFindByMonthReturnsEmptyBody() throws UnsupportedEncodingException { MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest. GET(String.format("/?month=%s", encodeValue(memberProfileOfAdmin.getStartDate().getMonth().toString()))).basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); @@ -53,7 +57,7 @@ public void testGETFindByMonthReturnsEmptyBody() throws UnsupportedEncodingExcep @Test public void testGETFindByMonthNotAuthorized() throws UnsupportedEncodingException { MemberProfile memberProfile = createAnUnrelatedUser(); - createAndAssignRole(RoleType.MEMBER, memberProfile); + assignMemberRole(memberProfile); final HttpRequest request = HttpRequest. GET(String.format("/?month=%s", encodeValue("dnc"))).basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE); @@ -71,7 +75,7 @@ public void testGETFindByMonthNotAuthorized() throws UnsupportedEncodingExceptio public void testGETFindByNoValue() { MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.GET("").basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayControllerTest.java index 2a8f29f1e5..a90dd9dff1 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/birthday/BirthDayControllerTest.java @@ -1,29 +1,26 @@ package com.objectcomputing.checkins.services.memberprofile.birthday; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.objectcomputing.checkins.services.TestContainersSuite; import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; -import com.objectcomputing.checkins.services.memberprofile.anniversaryreport.AnniversaryReportResponseDTO; import io.micronaut.core.type.Argument; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import io.micronaut.http.HttpStatus; -import io.micronaut.http.annotation.Controller; import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; -import org.junit.jupiter.api.Test; - import jakarta.inject.Inject; -import java.io.UnsupportedEncodingException; import java.util.List; import java.util.Map; - -import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; -import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class BirthDayControllerTest extends TestContainersSuite implements MemberProfileFixture, RoleFixture { @@ -31,11 +28,16 @@ public class BirthDayControllerTest extends TestContainersSuite implements Membe @Client("/services/reports/birthdays") private HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } + @Test public void testGETFindByValueNameOfTheMonth() { MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); MemberProfile memberProfile = createADefaultMemberProfileWithBirthDay(); final HttpRequest request = HttpRequest. @@ -52,7 +54,7 @@ public void testGETFindByValueNameOfTheMonth() { public void testGETFindByValueNameOfTheMonthAndDay() { MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); MemberProfile memberProfile = createADefaultMemberProfileWithBirthDayToday(); createADefaultMemberProfileWithBirthDayNotToday(); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportControllerTest.java index 5983c079d9..592bb6f4cc 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/csvreport/MemberProfileReportControllerTest.java @@ -1,13 +1,15 @@ package com.objectcomputing.checkins.services.memberprofile.csvreport; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.PDL_ROLE; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.objectcomputing.checkins.services.TestContainersSuite; import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; -import com.objectcomputing.checkins.services.memberprofile.birthday.BirthDayResponseDTO; -import com.objectcomputing.checkins.services.memberprofile.retentionreport.RetentionReportRequestDTO; -import com.objectcomputing.checkins.services.memberprofile.retentionreport.RetentionReportResponseDTO; -import io.micronaut.core.type.Argument; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import io.micronaut.http.HttpStatus; @@ -15,27 +17,23 @@ import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; import jakarta.inject.Inject; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.time.LocalDate; -import java.util.List; - -import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; -import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; -import static org.junit.Assert.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class MemberProfileReportControllerTest extends TestContainersSuite implements MemberProfileFixture, RoleFixture { @Inject @Client("/services/reports/member") private HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } + private String encodeValue(String value) throws UnsupportedEncodingException { return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); } @@ -44,12 +42,12 @@ private String encodeValue(String value) throws UnsupportedEncodingException { public void testGETReportSucceeds() { MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); MemberProfile memberProfile = createADefaultMemberProfile(); final HttpRequest request = HttpRequest. - GET("/csv").basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); + GET("/csv").basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); HttpResponse response = client.toBlocking().exchange(request, File.class); assertNotNull(response); @@ -59,4 +57,23 @@ public void testGETReportSucceeds() { assertNotNull(responseBody); } + @Test + public void testGETReportNoPermissions() { + + MemberProfile memberProfileOfPdl = createAnUnrelatedUser(); + assignPdlRole(memberProfileOfPdl); + + MemberProfile memberProfile = createADefaultMemberProfile(); + + final HttpRequest request = HttpRequest. + GET("/csv").basicAuth(memberProfileOfPdl.getWorkEmail(), PDL_ROLE); + + HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, () -> { + client.toBlocking().exchange(request, File.class); + }); + + assertNotNull(thrown.getResponse()); + assertEquals(HttpStatus.FORBIDDEN, thrown.getStatus()); + } + } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportControllerTest.java index 27d5f66723..f23825fc8e 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/memberprofile/retentionreport/RetentionReportControllerTest.java @@ -1,6 +1,11 @@ package com.objectcomputing.checkins.services.memberprofile.retentionreport; -import com.fasterxml.jackson.databind.JsonNode; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; +import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.objectcomputing.checkins.services.TestContainersSuite; import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; import com.objectcomputing.checkins.services.fixture.RoleFixture; @@ -11,38 +16,39 @@ import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.http.client.exceptions.HttpClientResponseException; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import jakarta.inject.Inject; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; -import java.util.Objects; - -import static com.objectcomputing.checkins.services.role.RoleType.Constants.ADMIN_ROLE; -import static com.objectcomputing.checkins.services.role.RoleType.Constants.MEMBER_ROLE; -import static org.junit.Assert.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class RetentionReportControllerTest extends TestContainersSuite implements MemberProfileFixture, RoleFixture { @Inject @Client("/reports/retention") private HttpClient client; + @BeforeEach + void createRolesAndPermissions() { + createAndAssignRoles(); + } + private String encodeValue(String value) throws UnsupportedEncodingException { return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); } @Test public void testPOSTEmptyRequestReturns400() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + RetentionReportRequestDTO dto = new RetentionReportRequestDTO(); HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, () -> { client.toBlocking().exchange(HttpRequest.POST("", dto) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE)); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE)); }); assertNotNull(thrown.getResponse()); @@ -51,6 +57,9 @@ public void testPOSTEmptyRequestReturns400() { @Test public void testPOSTNullStartDateReturns400() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + RetentionReportRequestDTO dto = new RetentionReportRequestDTO(); dto.setStartDate(null); dto.setEndDate(LocalDate.now()); @@ -58,7 +67,7 @@ public void testPOSTNullStartDateReturns400() { HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, () -> { client.toBlocking().exchange(HttpRequest.POST("", dto) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE)); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE)); }); assertNotNull(thrown.getResponse()); @@ -67,6 +76,9 @@ public void testPOSTNullStartDateReturns400() { @Test public void testPOSTNullEndDateReturns400() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + RetentionReportRequestDTO dto = new RetentionReportRequestDTO(); dto.setStartDate(LocalDate.now()); dto.setEndDate(null); @@ -74,7 +86,7 @@ public void testPOSTNullEndDateReturns400() { HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, () -> { client.toBlocking().exchange(HttpRequest.POST("", dto) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE)); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE)); }); assertNotNull(thrown.getResponse()); @@ -83,6 +95,9 @@ public void testPOSTNullEndDateReturns400() { @Test public void testPOSTEndDateBeforeStartDateReturns400() { + MemberProfile adminMember = createAnUnrelatedUser(); + assignAdminRole(adminMember); + RetentionReportRequestDTO dto = new RetentionReportRequestDTO(); dto.setStartDate(LocalDate.now()); dto.setEndDate(LocalDate.now().minusMonths(1)); @@ -90,7 +105,7 @@ public void testPOSTEndDateBeforeStartDateReturns400() { HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, () -> { client.toBlocking().exchange(HttpRequest.POST("", dto) - .basicAuth(MEMBER_ROLE, MEMBER_ROLE)); + .basicAuth(adminMember.getWorkEmail(), ADMIN_ROLE)); }); assertNotNull(thrown.getResponse()); @@ -105,7 +120,7 @@ void testValidRequestEmptyResponse() { dto.setFrequency("WEEKLY"); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.POST("", dto) .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); @@ -127,7 +142,7 @@ void testValidEmptyFrequencyResponse() { dto.setFrequency(""); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.POST("", dto) .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); @@ -149,7 +164,7 @@ void testValidCaseIgnoreFrequencyResponse() { dto.setFrequency("MoNtHlY"); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.POST("", dto) .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); @@ -176,7 +191,7 @@ void testCorrectRetentionResponse() { final MemberProfile memberProfile4 = createATerminatedNewHireProfile(); MemberProfile memberProfileOfAdmin = createAnUnrelatedUser(); - createAndAssignAdminRole(memberProfileOfAdmin); + assignAdminRole(memberProfileOfAdmin); final HttpRequest request = HttpRequest.POST("", dto) .basicAuth(memberProfileOfAdmin.getWorkEmail(), ADMIN_ROLE); @@ -190,4 +205,29 @@ void testCorrectRetentionResponse() { assertEquals(String.format("%s", request.getPath()), response.getHeaders().get("Location")); } + @Test + void testCorrectRetentionNoPermission() { + RetentionReportRequestDTO dto = new RetentionReportRequestDTO(); + dto.setStartDate(LocalDate.now().minusMonths(2)); + dto.setEndDate(LocalDate.now()); + dto.setFrequency("MONTHLY"); + + final MemberProfile memberProfile1 = createAPastMemberProfile(); + final MemberProfile memberProfile2 = createAPastTerminatedMemberProfile(); + final MemberProfile memberProfile3 = createANewHireProfile(); + final MemberProfile memberProfile4 = createATerminatedNewHireProfile(); + + MemberProfile memberProfile = createAnUnrelatedUser(); + assignMemberRole(memberProfile); + + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(memberProfile.getWorkEmail(), MEMBER_ROLE); + HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> { + client.toBlocking().exchange(request, RetentionReportResponseDTO.class); + }); + assertEquals(HttpStatus.FORBIDDEN, responseException.getStatus()); + + } + + } diff --git a/web-ui/.java-version b/web-ui/.java-version new file mode 100644 index 0000000000..ed9d00f9a5 --- /dev/null +++ b/web-ui/.java-version @@ -0,0 +1 @@ +14.0 diff --git a/web-ui/src/api/api.js b/web-ui/src/api/api.js index a221a07364..58bc079866 100644 --- a/web-ui/src/api/api.js +++ b/web-ui/src/api/api.js @@ -66,7 +66,7 @@ export const resolve = async (payload) => { type: UPDATE_TOAST, payload: { severity: "error", - toast: e?.response?.data?.message, + toast: e?.response?.data?.message || e?.message, }, }); } diff --git a/web-ui/src/context/selectors.js b/web-ui/src/context/selectors.js index cfc8513e25..4261c8fa57 100644 --- a/web-ui/src/context/selectors.js +++ b/web-ui/src/context/selectors.js @@ -232,18 +232,26 @@ export const selectPDLCheckinMap = createSelector(selectCheckins, (checkins) => export const selectSupervisors = createSelector( selectCurrentMembers, selectProfileMap, - (currentMembers, memberProfileMap) => currentMembers?.reduce((supervisors, currentMember) => { - let supervisorId = currentMember.supervisorid; + (currentMembers, memberProfileMap) => { + const filteredMembers = currentMembers?.filter(member => member.supervisorid); - const inSupervisors = supervisors.find( - (supervisor) => supervisorId === supervisor?.id - ) + const supervisorIds = filteredMembers?.map(member => member.supervisorid); + const uniqueSupervisorIds = [...new Set(supervisorIds)]; - if (!inSupervisors){ - supervisors.push(memberProfileMap[supervisorId]); - } + const supervisors = uniqueSupervisorIds.map(id => memberProfileMap[id]); return supervisors; - }, []) + } +); + +const buildSupervisorHierarchy = (allSupervisors, member, supervisorChain ) => { + const memberSupervisor = allSupervisors?.find(supervisor => supervisor.id === member?.supervisorid); + supervisorChain.push(memberSupervisor); + return !memberSupervisor?.supervisorid ? supervisorChain : buildSupervisorHierarchy(allSupervisors, memberSupervisor, supervisorChain); +} + +export const selectSupervisorHierarchyIds = (selectedMember) => createSelector( + selectSupervisors, + (allSupervisors) => buildSupervisorHierarchy(allSupervisors, selectedMember, []).map(supervisor => supervisor?.id) ); export const selectIsSupervisor = createSelector( @@ -275,19 +283,42 @@ export const selectMyTeam = createSelector( filterMembersBySupervisor ); +/* Internal Selector, not for export */ +const selectSubordinatesPreventCycle = createSelector( + selectTeamMembersBySupervisorId, + (_, managerId) => managerId, + (_, __, previouslyIncluded) => previouslyIncluded || [], + (state) => state, + (team, managerId, previouslyIncluded, state) => team.reduce((subordinates, teamMember) => { + if(previouslyIncluded.some((current) => current === teamMember.id)) + return subordinates; + else return [...subordinates, ...selectSubordinatesPreventCycle(state, teamMember.id, [...previouslyIncluded, managerId])]; + }, [...team]) +); + export const selectSubordinates = createSelector( selectTeamMembersBySupervisorId, - (state, managerId) => managerId, + (_, managerId) => managerId, (state) => state, (team, managerId, state) => team.reduce((subordinates, teamMember) => { - if(subordinates.some((current) => current.id === teamMember.id)) - return subordinates; - else return [...subordinates, ...selectSubordinates(state, teamMember.id)]; + return [...subordinates, ...selectSubordinatesPreventCycle(state, teamMember.id, [managerId])]; }, [...team]) ); +export const selectCurrentUserSubordinates = createSelector( + selectCurrentUserId, + (state) => state, + (currentUserId, state) => selectSubordinates(state, currentUserId) +); + +export const selectIsSubordinateOfCurrentUser = createSelector( + selectCurrentUserSubordinates, + (_, teamMemberId) => teamMemberId, + (subordinates, teamMemberId) => subordinates.some((teamMember) => teamMember.id === teamMemberId) +); + export const selectTeamMembersWithCheckinPDL = createSelector( - (state, pdlId) => pdlId, + (_, pdlId) => pdlId, selectPDLCheckinMap, selectProfileMap, (pdlId, pdlCheckinMap, profileMap) => diff --git a/web-ui/src/context/selectors.test.js b/web-ui/src/context/selectors.test.js index 0c0efceb97..3b3baf2e2e 100644 --- a/web-ui/src/context/selectors.test.js +++ b/web-ui/src/context/selectors.test.js @@ -10,7 +10,11 @@ import { selectCurrentMembers, selectNormalizedMembers, selectNormalizedTeams, - selectMostRecentCheckin, selectSupervisors, + selectMostRecentCheckin, + selectSupervisors, + selectSupervisorHierarchyIds, + selectSubordinates, + selectIsSubordinateOfCurrentUser, } from "./selectors"; describe("Selectors", () => { @@ -388,52 +392,9 @@ describe("Selectors", () => { }; expect(selectOrderedPdls(testState)).toEqual(matchingMembers); }); -}); -it("selectCheckinPdls should return an array of all member PDL profiles that have an associated checkin", () => { - const matchingMembers = [ - { - id: 12, - bioText: "foo", - name: "B PersonB", - firstName: "B", - lastName: "PersonB", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - startDate: [2012, 9, 29], - }, - { - id: 13, - bioText: "foo", - name: "C PersonC", - firstName: "C", - lastName: "PersonC", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - startDate: [2012, 9, 29], - }, - ]; - - const testState = { - checkins: [ - { pdlId: 13, completed: false, checkInDate: [2020, 9, 13] }, - { pdlId: 12, completed: false, checkInDate: [2021, 9, 12] }, - { pdlId: 12, completed: true, checkInDate: [2020, 9, 11] }, - ], - memberProfiles: [ - { - id: 11, - bioText: "foo", - name: "A PersonA", - firstName: "A", - lastName: "PersonA", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - startDate: [2012, 9, 29], - }, + it("selectCheckinPdls should return an array of all member PDL profiles that have an associated checkin", () => { + const matchingMembers = [ { id: 12, bioText: "foo", @@ -456,73 +417,55 @@ it("selectCheckinPdls should return an array of all member PDL profiles that hav workEmail: "employee@sample.com", startDate: [2012, 9, 29], }, - ], - }; - expect(selectCheckinPDLS(testState, true, true)).toEqual(matchingMembers); -}); + ]; -it("selectTeamMembersWithCheckinPDL should return an array of all members associated with a pdl that have a checkin", () => { - const matchingMembers = [ - { - id: 12, - bioText: "foo", - name: "B PersonB", - firstName: "B", - lastName: "PersonB", - location: "St Louis", - pdlId: 1, - title: "engineer", - workEmail: "employee@sample.com", - startDate: [2012, 9, 29], - }, - { - id: 13, - bioText: "foo", - name: "C PersonC", - firstName: "C", - lastName: "PersonC", - location: "St Louis", - pdlId: 1, - title: "engineer", - workEmail: "employee@sample.com", - startDate: [2012, 9, 29], - }, - ]; - - const testState = { - checkins: [ - { - teamMemberId: 12, - pdlId: 1, - completed: false, - checkInDate: [2020, 9, 10], - }, - { - teamMemberId: 13, - pdlId: 1, - completed: false, - checkInDate: [2020, 9, 10], - }, - { - teamMemberId: 11, - pdlId: 2, - completed: false, - checkInDate: [2020, 9, 10], - }, - ], - memberProfiles: [ - { - id: 11, - bioText: "foo", - name: "A PersonA", - firstName: "A", - lastName: "PersonA", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - pdlId: 2, - startDate: [2012, 9, 29], - }, + const testState = { + checkins: [ + { pdlId: 13, completed: false, checkInDate: [2020, 9, 13] }, + { pdlId: 12, completed: false, checkInDate: [2021, 9, 12] }, + { pdlId: 12, completed: true, checkInDate: [2020, 9, 11] }, + ], + memberProfiles: [ + { + id: 11, + bioText: "foo", + name: "A PersonA", + firstName: "A", + lastName: "PersonA", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + startDate: [2012, 9, 29], + }, + { + id: 12, + bioText: "foo", + name: "B PersonB", + firstName: "B", + lastName: "PersonB", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + startDate: [2012, 9, 29], + }, + { + id: 13, + bioText: "foo", + name: "C PersonC", + firstName: "C", + lastName: "PersonC", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + startDate: [2012, 9, 29], + }, + ], + }; + expect(selectCheckinPDLS(testState, true, true)).toEqual(matchingMembers); + }); + + it("selectTeamMembersWithCheckinPDL should return an array of all members associated with a pdl that have a checkin", () => { + const matchingMembers = [ { id: 12, bioText: "foo", @@ -547,33 +490,75 @@ it("selectTeamMembersWithCheckinPDL should return an array of all members associ workEmail: "employee@sample.com", startDate: [2012, 9, 29], }, - ], - }; - expect(selectTeamMembersWithCheckinPDL(testState, 1)).toEqual( - matchingMembers - ); -}); + ]; -it("selectCheckinsForTeamMemberAndPDL should return an array of all members associated with a pdl that have a checkin", () => { - const matchingCheckins = [ - { - id: 1, - teamMemberId: 12, - pdlId: 1, - completed: false, - checkInDate: [2020, 9, 10], - }, - { - id: 2, - teamMemberId: 12, - pdlId: 1, - completed: true, - checkInDate: [2020, 10, 10], - }, - ]; - - const testState = { - checkins: [ + const testState = { + checkins: [ + { + teamMemberId: 12, + pdlId: 1, + completed: false, + checkInDate: [2020, 9, 10], + }, + { + teamMemberId: 13, + pdlId: 1, + completed: false, + checkInDate: [2020, 9, 10], + }, + { + teamMemberId: 11, + pdlId: 2, + completed: false, + checkInDate: [2020, 9, 10], + }, + ], + memberProfiles: [ + { + id: 11, + bioText: "foo", + name: "A PersonA", + firstName: "A", + lastName: "PersonA", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + pdlId: 2, + startDate: [2012, 9, 29], + }, + { + id: 12, + bioText: "foo", + name: "B PersonB", + firstName: "B", + lastName: "PersonB", + location: "St Louis", + pdlId: 1, + title: "engineer", + workEmail: "employee@sample.com", + startDate: [2012, 9, 29], + }, + { + id: 13, + bioText: "foo", + name: "C PersonC", + firstName: "C", + lastName: "PersonC", + location: "St Louis", + pdlId: 1, + title: "engineer", + workEmail: "employee@sample.com", + startDate: [2012, 9, 29], + }, + ], + }; + expect(selectTeamMembersWithCheckinPDL(testState, 1)).toEqual( + matchingMembers + ); + }); + + it("selectCheckinsForTeamMemberAndPDL should return an array of all members associated with a pdl that have a checkin", () => { + const matchingCheckins = [ { id: 1, teamMemberId: 12, @@ -588,292 +573,601 @@ it("selectCheckinsForTeamMemberAndPDL should return an array of all members asso completed: true, checkInDate: [2020, 10, 10], }, + ]; + + const testState = { + checkins: [ + { + id: 1, + teamMemberId: 12, + pdlId: 1, + completed: false, + checkInDate: [2020, 9, 10], + }, + { + id: 2, + teamMemberId: 12, + pdlId: 1, + completed: true, + checkInDate: [2020, 10, 10], + }, + { + id: 3, + teamMemberId: 11, + pdlId: 2, + completed: false, + checkInDate: [2020, 9, 10], + }, + { + id: 4, + teamMemberId: 19, + pdlId: 4, + completed: false, + checkInDate: [2020, 9, 10], + }, + ], + memberProfiles: [ + { + id: 11, + bioText: "foo", + name: "A PersonA", + firstName: "A", + lastName: "PersonA", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + pdlId: 2, + startDate: [2012, 9, 29], + }, + { + id: 12, + bioText: "foo", + name: "B PersonB", + firstName: "B", + lastName: "PersonB", + location: "St Louis", + pdlId: 1, + title: "engineer", + workEmail: "employee@sample.com", + startDate: [2012, 9, 29], + }, + { + id: 13, + bioText: "foo", + name: "C PersonC", + firstName: "C", + lastName: "PersonC", + location: "St Louis", + pdlId: 1, + title: "engineer", + workEmail: "employee@sample.com", + startDate: [2012, 9, 29], + }, + ], + }; + expect(selectCheckinsForTeamMemberAndPDL(testState, 12, 1)).toEqual( + matchingCheckins + ); + }); + + it("selectCurrentMembers should return an array of non-terminated profiles", () => { + const testMemberProfiles = [ { - id: 3, - teamMemberId: 11, - pdlId: 2, - completed: false, - checkInDate: [2020, 9, 10], + id: 1, + bioText: "foo", + employeeId: 11, + name: "Iván López Martín", + firstName: "Iván", + lastName: "Martín", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + pdlId: 9, + startDate: [2012, 9, 29], }, { - id: 4, - teamMemberId: 19, - pdlId: 4, - completed: false, - checkInDate: [2020, 9, 10], + id: 2, + bioText: "foo", + employeeId: 12, + name: "B Person", + firstName: "B", + lastName: "PersonB", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + pdlId: 9, + startDate: [2012, 9, 29], }, - ], - memberProfiles: [ { - id: 11, + id: 3, bioText: "foo", - name: "A PersonA", - firstName: "A", - lastName: "PersonA", + employeeId: 13, + name: "C Person", + firstName: "C", + lastName: "PersonC", location: "St Louis", title: "engineer", workEmail: "employee@sample.com", - pdlId: 2, + pdlId: 9, startDate: [2012, 9, 29], + terminationDate: [2020, 12, 31], }, + ]; + const testState = { + memberProfiles: [ + testMemberProfiles[0], + testMemberProfiles[1], + testMemberProfiles[2], + ], + }; + + const result = { + memberProfiles: [testMemberProfiles[0], testMemberProfiles[1]], + }; + + expect(selectCurrentMembers(testState)).toEqual(result.memberProfiles); + }); + + it("selectNormalizedMembers should return an array of appropriate member profiles despite accents", () => { + const testMemberProfiles = [ { - id: 12, + id: 1, bioText: "foo", - name: "B PersonB", + employeeId: 11, + name: "Iván López Martín", + firstName: "Iván", + lastName: "Martín", + location: "St Louis", + title: "engineer", + workEmail: "employee@sample.com", + pdlId: 9, + startDate: [2012, 9, 29], + }, + { + id: 2, + bioText: "foo", + employeeId: 12, + name: "B Person", firstName: "B", lastName: "PersonB", location: "St Louis", - pdlId: 1, title: "engineer", workEmail: "employee@sample.com", + pdlId: 9, startDate: [2012, 9, 29], }, { - id: 13, + id: 3, bioText: "foo", - name: "C PersonC", + employeeId: 13, + name: "C Person", firstName: "C", lastName: "PersonC", location: "St Louis", - pdlId: 1, title: "engineer", workEmail: "employee@sample.com", + pdlId: 9, startDate: [2012, 9, 29], }, - ], - }; - expect(selectCheckinsForTeamMemberAndPDL(testState, 12, 1)).toEqual( - matchingCheckins - ); -}); + ]; + const testState = { + memberProfiles: [ + testMemberProfiles[0], + testMemberProfiles[1], + testMemberProfiles[2], + ], + }; -it("selectCurrentMembers should return an array of non-terminated profiles", () => { - const testMemberProfiles = [ - { - id: 1, - bioText: "foo", - employeeId: 11, - name: "Iván López Martín", - firstName: "Iván", - lastName: "Martín", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - pdlId: 9, - startDate: [2012, 9, 29], - }, - { - id: 2, - bioText: "foo", - employeeId: 12, - name: "B Person", - firstName: "B", - lastName: "PersonB", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - pdlId: 9, - startDate: [2012, 9, 29], - }, - { - id: 3, - bioText: "foo", - employeeId: 13, - name: "C Person", - firstName: "C", - lastName: "PersonC", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - pdlId: 9, - startDate: [2012, 9, 29], - terminationDate: [2020, 12, 31], - }, - ]; - const testState = { - memberProfiles: [ - testMemberProfiles[0], - testMemberProfiles[1], - testMemberProfiles[2], - ], - }; - - const result = { - memberProfiles: [testMemberProfiles[0], testMemberProfiles[1]], - }; - - expect(selectCurrentMembers(testState)).toEqual(result.memberProfiles); -}); + const result = { + memberProfiles: [testMemberProfiles[0]], + }; -it("selectNormalizedMembers should return an array of appropriate member profiles despite accents", () => { - const testMemberProfiles = [ - { - id: 1, - bioText: "foo", - employeeId: 11, - name: "Iván López Martín", - firstName: "Iván", - lastName: "Martín", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - pdlId: 9, - startDate: [2012, 9, 29], - }, - { - id: 2, - bioText: "foo", - employeeId: 12, - name: "B Person", - firstName: "B", - lastName: "PersonB", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - pdlId: 9, - startDate: [2012, 9, 29], - }, - { - id: 3, - bioText: "foo", - employeeId: 13, - name: "C Person", - firstName: "C", - lastName: "PersonC", - location: "St Louis", - title: "engineer", - workEmail: "employee@sample.com", - pdlId: 9, - startDate: [2012, 9, 29], - }, - ]; - const testState = { - memberProfiles: [ - testMemberProfiles[0], - testMemberProfiles[1], - testMemberProfiles[2], - ], - }; - - const result = { - memberProfiles: [testMemberProfiles[0]], - }; - - const searchText = "ivan"; - - expect(selectNormalizedMembers(testState, searchText)).toEqual( - result.memberProfiles - ); -}); + const searchText = "ivan"; -it("selectNormalizedTeams should return an array of appropriate teams despite accents", () => { - const testTeams = [ - { - id: "3fa85f64-5717-4562-b3fc-2c963f66afa6", - name: "Iváns Team", - description: "string", - }, - { - id: "3fa4-5717-4562-b3fc-2c963f66afa6", - name: "stuff", - description: "", - }, - ]; - const testState = { - teams: [testTeams[0], testTeams[1]], - }; - - const searchText = "ivan"; - - const result = { - teams: [testTeams[0]], - }; - - expect(selectNormalizedTeams(testState, searchText)).toEqual(result.teams); -}); + expect(selectNormalizedMembers(testState, searchText)).toEqual( + result.memberProfiles + ); + }); -it("selectMostRecentCheckin should return the most recent and or open checkin", () => { - const memberId = "1"; - const checkins = [ - { - checkInDate: [2020, 9, 29, 10, 32, 29, 40000000], - completed: false, - id: "2", - pdlId: "1", - teamMemberId: "1", - }, - { + it("selectNormalizedTeams should return an array of appropriate teams despite accents", () => { + const testTeams = [ + { + id: "3fa85f64-5717-4562-b3fc-2c963f66afa6", + name: "Iváns Team", + description: "string", + }, + { + id: "3fa4-5717-4562-b3fc-2c963f66afa6", + name: "stuff", + description: "", + }, + ]; + const testState = { + teams: [testTeams[0], testTeams[1]], + }; + + const searchText = "ivan"; + + const result = { + teams: [testTeams[0]], + }; + + expect(selectNormalizedTeams(testState, searchText)).toEqual(result.teams); + }); + + it("selectMostRecentCheckin should return the most recent and or open checkin", () => { + const memberId = "1"; + const checkins = [ + { + checkInDate: [2020, 9, 29, 10, 32, 29, 40000000], + completed: false, + id: "2", + pdlId: "1", + teamMemberId: "1", + }, + { + checkInDate: [2020, 9, 30, 10, 32, 29, 40000000], + completed: false, + id: "1", + pdlId: "1", + teamMemberId: "1", + }, + ]; + + const state = { checkins: [checkins[0], checkins[1]] }; + + const expectedResult = { checkInDate: [2020, 9, 30, 10, 32, 29, 40000000], completed: false, id: "1", pdlId: "1", teamMemberId: "1", - }, - ]; + }; + + console.log(selectMostRecentCheckin(state, memberId)); + expect(selectMostRecentCheckin(state, memberId)).toEqual(expectedResult); + }); + + it("selectSupervisors should return only members who are supervisors", () => { + const testMemberProfiles = [ + { + id: 1, + employeeId: 11, + name: "Big Boss", + firstName: "Big", + lastName: "Boss", + supervisorid: 5, + }, + { + id: 2, + employeeId: 12, + name: "Huey Emmerich", + firstName: "Huey", + lastName: "Emmerich", + supervisorid: 1, + }, + { + id: 3, + employeeId: 13, + name: "Kazuhira Miller", + firstName: "Kazuhira", + lastName: "Miller", + supervisorid: 1, + }, + { + id: 4, + employeeId: 14, + name: "Revolver Ocelot", + firstName: "Revolver", + lastName: "Ocelot", + supervisorid: 3, + }, + { + id: 5, + employeeId: 15, + name: "The Boss", + firstName: "The", + lastName: "Boss", + }, + ] - const state = { checkins: [checkins[0], checkins[1]] }; + const testState = { + memberProfiles: testMemberProfiles + }; - const expectedResult = { - checkInDate: [2020, 9, 30, 10, 32, 29, 40000000], - completed: false, - id: "1", - pdlId: "1", - teamMemberId: "1", - }; + const expectedResult = [testMemberProfiles[4], testMemberProfiles[0], testMemberProfiles[2]]; - console.log(selectMostRecentCheckin(state, memberId)); - expect(selectMostRecentCheckin(state, memberId)).toEqual(expectedResult); -}); + expect(selectSupervisors(testState)).toEqual(expectedResult); + }); + + it("selectSupervisorHierarchyIds should return a list of ids of everyone who is above the selected member", () => { + const testMemberProfiles = [ + { + id: 1, + employeeId: 11, + name: "Big Boss", + firstName: "Big", + lastName: "Boss", + supervisorid: 2, + }, + { + id: 2, + employeeId: 12, + name: "Huey Emmerich", + firstName: "Huey", + lastName: "Emmerich", + supervisorid: 4, + }, + { + id: 3, + employeeId: 13, + name: "Kazuhira Miller", + firstName: "Kazuhira", + lastName: "Miller", + supervisorid: 5, + }, + { + id: 4, + employeeId: 14, + name: "Revolver Ocelot", + firstName: "Revolver", + lastName: "Ocelot", + supervisorid: 6, + }, + { + id: 5, + employeeId: 15, + name: "The Boss", + firstName: "The", + lastName: "Boss", + supervisorid: 6, + }, + { + id: 6, + employeeId: 15, + name: "No Supervisor", + firstName: "No", + lastName: "Supervisor", + }, + ] + + const testState = { + memberProfiles: testMemberProfiles + }; + + const expectedResult = [testMemberProfiles[1].id, testMemberProfiles[3].id, testMemberProfiles[5].id]; + + expect(selectSupervisorHierarchyIds(testMemberProfiles[0])(testState)).toEqual(expectedResult); + }); + + it("selectSubordinates should return entire subordinate heirarchy", () => { + const testMemberProfiles = [ + { + id: 1, + employeeId: 11, + name: "Big Boss", + firstName: "Big", + lastName: "Boss", + supervisorid: 5, + }, + { + id: 2, + employeeId: 12, + name: "Huey Emmerich", + firstName: "Huey", + lastName: "Emmerich", + supervisorid: 1, + }, + { + id: 3, + employeeId: 13, + name: "Kazuhira Miller", + firstName: "Kazuhira", + lastName: "Miller", + supervisorid: 1, + }, + { + id: 4, + employeeId: 14, + name: "Revolver Ocelot", + firstName: "Revolver", + lastName: "Ocelot", + supervisorid: 3, + }, + { + id: 5, + employeeId: 15, + name: "THE Boss", + firstName: "THE", + lastName: "Boss", + }, + { + id: 6, + employeeId: 16, + name: "Entry Level", + firstName: "Entry", + lastName: "Level", + supervisorid: 4, + }, + { + id: 7, + employeeId: 15, + name: "Other Boss", + firstName: "Other", + lastName: "Boss", + supervisorid: 5, + }, + { + id: 8, + employeeId: 15, + name: "Other Person", + firstName: "Other", + lastName: "Person", + supervisorid: 7, + }, + ] + + const testState = { + memberProfiles: testMemberProfiles + }; + + const expectedResult = [testMemberProfiles[1], testMemberProfiles[2], testMemberProfiles[3], testMemberProfiles[5]]; + + expect(selectSubordinates(testState, testMemberProfiles[0].id)).toEqual(expectedResult); + }); + +it("selectIsSubordinateOfCurrentUser should return true when user is in the current users' heirarchy", () => { + const testMemberProfiles = [ + { + id: 1, + employeeId: 11, + name: "Big Boss", + firstName: "Big", + lastName: "Boss", + supervisorid: 5, + }, + { + id: 2, + employeeId: 12, + name: "Huey Emmerich", + firstName: "Huey", + lastName: "Emmerich", + supervisorid: 1, + }, + { + id: 3, + employeeId: 13, + name: "Kazuhira Miller", + firstName: "Kazuhira", + lastName: "Miller", + supervisorid: 1, + }, + { + id: 4, + employeeId: 14, + name: "Revolver Ocelot", + firstName: "Revolver", + lastName: "Ocelot", + supervisorid: 3, + }, + { + id: 5, + employeeId: 15, + name: "THE Boss", + firstName: "THE", + lastName: "Boss", + }, + { + id: 6, + employeeId: 16, + name: "Entry Level", + firstName: "Entry", + lastName: "Level", + supervisorid: 4, + }, + { + id: 7, + employeeId: 15, + name: "Other Boss", + firstName: "Other", + lastName: "Boss", + supervisorid: 5, + }, + { + id: 8, + employeeId: 15, + name: "Other Person", + firstName: "Other", + lastName: "Person", + supervisorid: 7, + }, + ] + + const testState = { + userProfile: { + memberProfile: testMemberProfiles[0] + }, + memberProfiles: testMemberProfiles + }; + + expect(selectIsSubordinateOfCurrentUser(testState, testMemberProfiles[5].id)).toBe(true); + }); + +it("selectIsSubordinateOfCurrentUser should return false when user is not in the current users' heirarchy", () => { + const testMemberProfiles = [ + { + id: 1, + employeeId: 11, + name: "Big Boss", + firstName: "Big", + lastName: "Boss", + supervisorid: 5, + }, + { + id: 2, + employeeId: 12, + name: "Huey Emmerich", + firstName: "Huey", + lastName: "Emmerich", + supervisorid: 1, + }, + { + id: 3, + employeeId: 13, + name: "Kazuhira Miller", + firstName: "Kazuhira", + lastName: "Miller", + supervisorid: 1, + }, + { + id: 4, + employeeId: 14, + name: "Revolver Ocelot", + firstName: "Revolver", + lastName: "Ocelot", + supervisorid: 3, + }, + { + id: 5, + employeeId: 15, + name: "THE Boss", + firstName: "THE", + lastName: "Boss", + }, + { + id: 6, + employeeId: 16, + name: "Entry Level", + firstName: "Entry", + lastName: "Level", + supervisorid: 4, + }, + { + id: 7, + employeeId: 15, + name: "Other Boss", + firstName: "Other", + lastName: "Boss", + supervisorid: 5, + }, + { + id: 8, + employeeId: 15, + name: "Other Person", + firstName: "Other", + lastName: "Person", + supervisorid: 7, + }, + ] + + const testState = { + userProfile: { + memberProfile: testMemberProfiles[0] + }, + memberProfiles: testMemberProfiles + }; + + expect(selectIsSubordinateOfCurrentUser(testState, testMemberProfiles[7].id)).toBe(false); + }); -it("selectSupervisors should return only members who are supervisors", () => { - const testMemberProfiles = [ - { - id: 1, - employeeId: 11, - name: "Big Boss", - firstName: "Big", - lastName: "Boss", - supervisorid: 5, - }, - { - id: 2, - employeeId: 12, - name: "Huey Emmerich", - firstName: "Huey", - lastName: "Emmerich", - supervisorid: 1, - }, - { - id: 3, - employeeId: 13, - name: "Kazuhira Miller", - firstName: "Kazuhira", - lastName: "Miller", - supervisorid: 1, - }, - { - id: 4, - employeeId: 14, - name: "Revolver Ocelot", - firstName: "Revolver", - lastName: "Ocelot", - supervisorid: 3, - }, - { - id: 5, - employeeId: 15, - name: "The Boss", - firstName: "The", - lastName: "Boss", - supervisorid: 1, - }, - ] - - const testState = { - memberProfiles: testMemberProfiles - }; - - const expectedResult = [testMemberProfiles[4], testMemberProfiles[0], testMemberProfiles[2]]; - - expect(selectSupervisors(testState)).toEqual(expectedResult); }); diff --git a/web-ui/src/context/thunks.js b/web-ui/src/context/thunks.js index 777c07dcfa..7c773f8ca9 100644 --- a/web-ui/src/context/thunks.js +++ b/web-ui/src/context/thunks.js @@ -51,6 +51,9 @@ export const createNewCheckin = async (memberProfile, dispatch, csrf) => { }, csrf ); + + if (res.error) return; + const checkin = res.payload && res.payload.data && !res.error ? res.payload.data : null; diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 05ff6c4d0b..682902e2fc 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -149,17 +149,19 @@ const FeedbackRequestPage = () => { }, [memberIds, query, dispatch, handleQueryChange]); const isValidDate = useCallback((dateString) => { - let today = new Date(); - today = dateUtils.format(today, "MM/dd/yyyy"); - let timeStamp = Date.parse(dateString) - if (dateString < today) + const today = new Date().setHours(0, 0, 0, 0); + const timeStamp = Date.parse(dateString); + if (timeStamp < today) return false; else return !isNaN(timeStamp); }, []); const hasSend = useCallback(() => { - const isValidPair = query.due ? query.due >= query.send : true; + const dueTimestamp = Date.parse(query.due); + const sendTimestamp = Date.parse(query.send); + + const isValidPair = query.due ? dueTimestamp >= sendTimestamp : true; return (query.send && isValidDate(query.send) && isValidPair) }, [query.send, isValidDate, query.due]); @@ -171,6 +173,7 @@ const FeedbackRequestPage = () => { return hasFor() && templateIsValid && hasFrom(); } else if (activeStep === 3) { const dueQueryValid = query.due ? isValidDate(query.due) : true; + console.log({hasFor: hasFor(), templateIsValid, hasFrom: hasFrom(), hasSend: hasSend(), dueQueryValid}); return hasFor() && templateIsValid && hasFrom() && hasSend() && dueQueryValid; } else { return false; diff --git a/web-ui/src/pages/MemberProfilePage.jsx b/web-ui/src/pages/MemberProfilePage.jsx index 3b0abbc453..19d34d4fb3 100644 --- a/web-ui/src/pages/MemberProfilePage.jsx +++ b/web-ui/src/pages/MemberProfilePage.jsx @@ -1,7 +1,7 @@ import React, { useContext, useEffect, useState } from "react"; import { useParams } from "react-router-dom"; -import { selectProfile, selectTerminatedMembers } from "../context/selectors"; +import { selectCurrentUserId, selectIsAdmin, selectProfile, selectTerminatedMembers, selectSupervisorHierarchyIds } from "../context/selectors"; import { AppContext } from "../context/AppContext"; import { getSelectedMemberSkills } from "../api/memberskill"; import { getTeamByMember } from "../api/team"; @@ -18,6 +18,7 @@ import "./MemberProfilePage.css"; import { Avatar, + Button, Card, CardContent, CardHeader, @@ -27,16 +28,24 @@ import { Tooltip, Typography, } from "@mui/material"; +import { useHistory } from "react-router-dom"; const MemberProfilePage = () => { const { state } = useContext(AppContext); + const history = useHistory(); const { csrf, skills, userProfile } = state; const { memberId } = useParams(); const [selectedMember, setSelectedMember] = useState(null); const sortedPdls = selectOrderedPdls(state); const sortedMembers = selectOrderedMemberFirstName(state); - let pdlInfo = sortedPdls && sortedPdls.find((pdl) => pdl?.id === selectedMember?.pdlId) - let supervisorInfo = sortedMembers && sortedMembers.find((memberProfile) => memberProfile?.id === selectedMember?.supervisorid) + const isAdmin = selectIsAdmin(state); + const currentUserId = selectCurrentUserId(state); + const pdlInfo = sortedPdls && sortedPdls.find((pdl) => pdl?.id === selectedMember?.pdlId); + const supervisorInfo = sortedMembers && sortedMembers.find((memberProfile) => memberProfile?.id === selectedMember?.supervisorid); + const supervisorChain = selectSupervisorHierarchyIds(selectedMember)(state); + const currentUserIsPdl = pdlInfo?.id === currentUserId; + const currentUserIsSupervisor = supervisorChain.includes(currentUserId); + const canRequestFeedback = isAdmin || currentUserIsPdl || currentUserIsSupervisor; useEffect(() => { @@ -157,6 +166,18 @@ const MemberProfilePage = () => {

{(pdlInfo && "PDL: " + pdlInfo.firstName + " " + pdlInfo.lastName) || ("")}

+ {canRequestFeedback && + + } )} diff --git a/web-ui/yarn.lock b/web-ui/yarn.lock index 8cd4e903f9..a77fe9c242 100644 --- a/web-ui/yarn.lock +++ b/web-ui/yarn.lock @@ -15929,9 +15929,9 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== "tinymce@^6.0.0 || ^5.5.1": - version "6.2.0" - resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-6.2.0.tgz#473aa38af03bf772916f3e1730e6b8d3471203f0" - integrity sha512-zLjbFrg0hbtJ6PxmZUjQY6zyIOM/mLrWGTvhBec7XwYwoW1E0xXMQzy2tgMTh3OvJpsclgqf2ZMjmwcv4Cludw== + version "6.8.1" + resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-6.8.1.tgz#840f514b4a175f55042cbe2fce548b10fc38208b" + integrity sha512-WYPvMXIjBrXM/oBiqGCbT2a8ptiO3TWXm/xxPWDCl8SxRKMW7Rfp0Lk190E9fXmX6uh9lJMRCnmKHzvryz0ftA== tmp@^0.0.33: version "0.0.33"