테스트케이스에 필요한 데이터 생성 방법은 알았기 때문에
이제 어떤 데이터를 입력해서 어떤 값이 나오는지를 확인해볼 차례였다.
input으로는 일단 이게 업데이트하는 데이터인지 insert하는 데이터인지를 비교하는 boolean 값이 있는데
이것을 위해 두번의 호출로 true, false를 넣어줘야 했다.
그 다음 매개변수인 triggerNew는 User List로 이루어져 있고
해당 내부에서 사용되는 데이터는 ProfileId, Location__c, Id 세개의 필드가 있고
triggerOldMap는 Map<Id, User>로 업데이트의 경우에만 존재하며
자세히 내용을 보는데 왜 이걸 넣었는지 의아할 정도로(코드 리팩토링 도중 ID로 조회로 변경)
user.Id와 다를게 없었다.
당연히 User의 ID는 동일한 값을 가지고 있어야 하는데
이전 쉐어링 그룹의 ID를 하나씩 조회할 때는 oldUser의 쉐어링 그룹을 찾았지만
해당 코드들을 모두 지우고 재생성하는 과정에서는 User.Id만 존재하면 되기 때문에
해당 부분들을 주석처리하고 user.Id를 넣어봤는데
정상적으로 잘 작동하는 모습을 확인할 수 있었기 때문에
트리거에서 매개변수 하나를 제거하고
핸들러에서도 해당 매개변수 삭제 및 Id 처리 방식을 User.Id로 변경했다.
결론적으로는 이제 분석한 update 여부와 Location__c, Id만 조심하면 되고
update는 기존 데이터로 하기에는 애매하기 때문에
첫 테스트에서 User를 두개 넣고 그 뒤에 업데이트 처리도 하는 것으로 결정했다.
하지만 데이터 생성이 쉽지는 않았는데
contact와는 다르게 유저는 생성하는데 필수적인 조건이 많았고
해당 조건을 모두 충족시키고 진행해도 포탈 유저(파트너 커뮤니티)를 생성하려면
Contact.Id가 필요하다는 경고를 다시 볼 수 있었다.
결국 Contact까지 추가한 다음 insert를 하고
해당 Contact.Id를 추가해준 다음 진행했지만
UserName을 다시 지정하라고 해서 추가하고
다시 또 포탈 유저는 role이 있어야 한다고 하는데
role의 이름을 지정해야 하는건지 아니면 id를 넣어야 하는지도 모르는 상황이다.
확인 결과 Id를 넣어줘야 한다는 결과가 나왔고
아무 Id나 넣어봤지만 되지 않았기 때문에
다시 또 쿼리를 날려서 특정 Id값을 가져왔다.
포탈 롤 관련해서 지우고 다시 확인해보니
portal account owner must have a role라는 경고였고
해당 문제를 해결하기 위해 이런저런 시도를 해봤지만
role을 등록하라는 문제가 아니고 Account가 등록되지 않았기 때문에
자연발생 role이 없어서 발생한 문제로 testSetup에
contact를 추가하기 전 account를 먼저 생성해준 다음
생성한 account의 id를 contact에 추가하니 문제를 해결할 수 있었다.
해당 값을 넣고 쿼리들을 Database.query 형태로 변경하고
최종적으로 처리된 각 멤버들의 그룹 아이디를 찾아 테스트를 통과한 모습을 보고 테스트를 마무리했다.
하지만 pmd가 되지 않기 때문에 다시 가져온 회사 노트북을 꺼내서
pmd를 확인하는데 테스트클래스에서는 데이터베이스 보안쪽에 민감하지 않아서
조금 쉽게 마무리를 할 수 있었다.
파일 제한은 file을 설정하면 된다고 하는데
객체 부분의 file을 들어가려고 했는데 검색하다보니
Share Files with People in Experience Cloud sites 부분이 눈에 띄었다.
일단 해당 기능을 막았지만
현재 상태에서 파트너가 파일 업로드를 하려고 시도할 수 있는 방법이 없기 때문에
이정도면 충분하지 않을까? 라는 생각을 하고 넘어가기로 했다.
혹시 몰라서 추가로 검색하던 도중
공식문서에서 Let customer users access notes and attachments 부분을 보고
이 부분도 막아둬야겠다는 생각이 들어서 이 부분을 추가로 막은 다음 첨부파일 부분은 마무리했다.
플로우로 진행하려면 추가적으로 고려해야 할 사항이 있을지도 모르겠지만
LWC를 통해서 페이지를 구성할 예정이기 때문에
사용자 파일 업로드를 추가적으로 제한하는 것은 불필요하다고 느꼈다.
LWC 페이지를 만들기 전
사용자가 권한에 맞는 데이터만 보게 하기 위해서는 추가 조치가 필요해 보였지만
다행히 WITH SECURITY_ENFORCED를 사용할 경우
요청 유저의 권한에 맞게 데이터를 보낸다고 하기 때문에 안심하고 내일 작성할 수 있을 것 같다.
(1).백준 15096번 Batter Up은 장타율을 구해야 하는 문제였다.
주어진 타격 횟수 중 -1은 볼넷 등 장타율에 관여하지 않는 부분이기 때문에
타격 횟수의 계산 기준에서 벗어난다는 조건일 경우 -1이 아닌 타격 횟수를 모두 더한 다음
각 타격 횟수에서 진출한 포인트(1~3루)를 모두 더해 타격 횟수의 합으로 나누어 해결할 수 있다.
const input = `11
-1 -1 -1 -1 0 0 0 0 0 0 1`.split('\n').map(el => el.split(' ').map(Number))
let count = 0
let point = 0
for(let i = 0 ; i < input[1].length ; i++){
if(input[1][i] !== -1){
count++
point += input[1][i]
}
}
console.log(point/count)
'회고' 카테고리의 다른 글
[수습일지] - 65 (0) | 2023.05.30 |
---|---|
[수습일지] - 64(석가탄신일 대체공휴일) (0) | 2023.05.29 |
[수습일지] - 62(주말) (0) | 2023.05.27 |
[수습일지] - 61 (0) | 2023.05.26 |
[수습일지] - 60 (0) | 2023.05.25 |