Filter owning-entities from /category_parameter by permissions
[vid.git] / vid-app-common / src / test / java / org / onap / vid / services / CategoryParameterServiceWithRolesTest.kt
1 package org.onap.vid.services
2
3 import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
4 import com.fasterxml.jackson.module.kotlin.readValue
5 import net.javacrumbs.jsonunit.JsonMatchers.jsonEquals
6 import net.javacrumbs.jsonunit.JsonMatchers.jsonPartEquals
7 import org.hamcrest.CoreMatchers.allOf
8 import org.hamcrest.MatcherAssert.assertThat
9 import org.intellij.lang.annotations.Language
10 import org.mockito.ArgumentMatchers.any
11 import org.mockito.InjectMocks
12 import org.mockito.Mock
13 import org.mockito.Mockito
14 import org.mockito.Mockito.mock
15 import org.mockito.invocation.InvocationOnMock
16 import org.onap.vid.category.CategoryParameterOptionRep
17 import org.onap.vid.category.CategoryParametersResponse
18 import org.onap.vid.roles.RoleProvider
19 import org.onap.vid.roles.RoleValidator
20 import org.onap.vid.services.CategoryParameterServiceWithRoles.OwningEntityOptionRep
21 import org.onap.vid.testUtils.TestUtils
22 import org.testng.annotations.BeforeMethod
23 import org.testng.annotations.Test
24 import org.togglz.core.manager.FeatureManager
25 import javax.servlet.http.HttpServletRequest
26 import org.mockito.Mockito.`when` as _when
27
28 class CategoryParameterServiceWithRolesTest {
29
30     @Mock lateinit var categoryParameterService: CategoryParameterService
31     @Mock lateinit var featureManager: FeatureManager
32     @Mock lateinit var roleProvider: RoleProvider
33     @Mock lateinit var request: HttpServletRequest
34
35     private lateinit var alwaysTrueRoles: RoleValidator
36     private lateinit var alwaysFalseRoles: RoleValidator
37
38     @InjectMocks
39     lateinit var categoryParameterServiceWithRoles: CategoryParameterServiceWithRoles;
40
41     @BeforeMethod
42     fun initMocks() {
43         TestUtils.initMockitoMocks(this)
44
45         alwaysTrueRoles = mock(RoleValidator::class.java, Mockito.withSettings().defaultAnswer { o: InvocationOnMock? -> true })
46         alwaysFalseRoles = mock(RoleValidator::class.java)
47     }
48
49     @Test
50     fun `treatPermissions -- given no permissions -- owningEntity lists is empty, the rest left intact`() {
51         _when(roleProvider.getUserRolesValidator(any())).thenReturn(alwaysFalseRoles)
52
53         assertThat(
54                 categoryParameterServiceWithRoles.treatPermissions(categoryParametersResponse),
55                 allOf(
56                     jsonPartEquals("categoryParameters.owningEntity", emptyList<Any>()),
57                     jsonEquals<CategoryParametersResponse>(categoryParametersResponse)
58                             .whenIgnoringPaths("categoryParameters.owningEntity")
59                 )
60         )
61     }
62
63     @Test
64     fun `treatPermissions -- given all permissions -- response left intact`() {
65         _when(roleProvider.getUserRolesValidator(any())).thenReturn(alwaysTrueRoles)
66
67         assertThat(
68                 categoryParameterServiceWithRoles.treatPermissions(categoryParametersResponse),
69                 jsonEquals(categoryParametersResponse)
70         )
71     }
72
73     @Test
74     fun `treatPermissions -- given permission to WayneHolland -- only one owningEntity WayneHolland is left`() {
75         val wayneHolland = CategoryParameterOptionRep("d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland")
76
77         val roleValidatorForWayneHolland = mock(RoleValidator::class.java)
78         _when(roleValidatorForWayneHolland.isServicePermitted(OwningEntityOptionRep(wayneHolland))).thenReturn(true)
79
80         _when(roleProvider.getUserRolesValidator(any())).thenReturn(roleValidatorForWayneHolland)
81
82         assertThat(
83                 categoryParameterServiceWithRoles.treatPermissions(categoryParametersResponse),
84                 jsonPartEquals("categoryParameters.owningEntity", listOf(wayneHolland))
85         )
86     }
87
88
89
90     @Language("JSON") val categoryParametersResponse: CategoryParametersResponse =
91         jacksonObjectMapper().readValue("""
92             {
93               "categoryParameters": {
94                 "lineOfBusiness": [
95                   { "id": "ONAP", "name": "ONAP" },
96                   { "id": "zzz1", "name": "zzz1" }
97                 ],
98                 "owningEntity": [
99                   { "id": "b1a9a80e-71b8-4176-9ac6-d265bf30e9d9", "name": "Melissa" },
100                   { "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "name": "WayneHolland" }
101                 ],
102                 "project": [
103                   { "id": "WATKINS", "name": "WATKINS" },
104                   { "id": "yyy1", "name": "yyy1" }
105                 ],
106                 "platform": [
107                   { "id": "platform", "name": "platform" },
108                   { "id": "xxx1", "name": "xxx1" }
109                 ]
110               }
111             }""")
112
113
114 }