channel collab user roles nucleusUsername

PHOTO EMBED

Wed Sep 20 2023 12:04:18 GMT+0000 (Coordinated Universal Time)

Saved by @thanuj

package com.modeln.channelcollab.junit;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.modeln.channelnetwork.junit.graphql.AbstractChannelNetworkTest;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.json.JSONObject;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Date;
import java.util.*;

import static org.junit.Assert.assertThrows;

@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Tag("channelcollab")
public class ChannelCollaborationUserRolesTest extends AbstractChannelNetworkTest
{

    private static String token, nucleusUsername, url, expected, testDataPath = "src/test/resources/com/modeln/cdm/junit/channelcollab/keyCloakResource.json";

    private static List expectedList;

    private static JsonObject jsonObject;

    private static String sql = "SELECT distinct JSON_OBJECT( " +
            " 'reportingPartnerId' value rp.id,  " +
            "  'reportingPartnerSid' value rp.sid , " +
            "  'reportingPartnerIp' value rp.inow_profile_sid, "+
            "  'reportingPartnerCreateDate' value rp.create_date , " +
            "  'reportingPartnerUpdateDate' value rp.update_date , " +
            "  'reportingPartnerName' value rcov.entity_name , " +
            "  'dataType' value dt.type , " +
            "  'fileType' value ft.type )" +
            "FROM " +
            "  gs_number gs " +
            "  JOIN reporting_partner rp ON rp.sid = gs.reporting_partner_sid " +
            "  JOIN user_feature_group ufg ON nvl(" +
            "    ufg.reporting_partner_sid, rp.sid" +
            "  )= rp.sid " +
            "  AND nvl(ufg.customer_sid,:customerSid) = :customerSid " +
            "  JOIN service_user su ON su.sid = ufg.service_user_sid " +
            "  JOIN feature_group fg ON fg.sid = ufg.feature_group_sid " +
            "  JOIN feature_assignment fa ON fa.feature_group_sid = fg.sid " +
            "  JOIN feature f ON f.sid = fa.feature_sid " +
            "  AND f.name LIKE 'fileUpload_dataType_%' " +
            "  JOIN data_type dt ON concat('fileUpload_dataType_', dt.type) = f.name " +
            "  JOIN configuration cfg ON cfg.name = dt.type " +
            "  AND cfg.service_name = 'parserService' " +
            "  AND nvl(" +
            "    cfg.reporting_partner_sid, rp.sid" +
            "  )= rp.sid " +
            "  AND nvl(cfg.customer_sid,:customerSid) = :customerSid " +
            "  JOIN file_type ft ON (" +
            "    ft.type = cfg.configuration_type " +
            "    OR (" +
            "      concat(ft.type, '2') = cfg.configuration_type " +
            "      AND ft.type LIKE 'edi%'" +
            "    )" +
            "  ) " +
            "  JOIN RP_CSR_OVERLAY_V rcov ON rcov.ip_sid = rp.inow_profile_sid " +
            "  AND rcov.CUSTOMER_SID = :customerSid " +
            "WHERE " +
            "  gs.customer_sid = :customerSid " +
            "  AND su.login = :login " +
            "GROUP BY " +
            "  rp.id, " +
            "  rcov.entity_name, " +
            "  rp.create_date," +
            "  rp.update_date," +
            "  rp.inow_profile_sid," +
            "  rp.sid," +
            "  dt.type, " +
            "  ft.type";

    @BeforeAll
    public void getExpectedData() throws Exception
    {
        expected = ReadResource(testDataPath);
        expectedList = List.of((expected.substring(1, expected.length() - 1)).split(","));
    }

    private static boolean checkSubListstring(List<String> mainList, List<String> subList)
    {
        return (mainList.containsAll(subList));
    }

    private String ReadResource(String s) throws Exception
    {
        JsonParser parser = new JsonParser();
        Object obj = parser.parse(new FileReader(s));
        JsonObject jsonObject = (JsonObject) obj;
        Object type = jsonObject.get("key");
        String roles = type.toString();
        return roles;
    }

    private List<String> LoadEntitlements(String url, String token) throws IOException, org.apache.hc.core5.http.ParseException
    {
        CloseableHttpClient client = HttpClientBuilder.create().build();
        HttpPost post = new HttpPost(url);
        ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
        parameters.add(new BasicNameValuePair("grant_type", "urn:ietf:params:oauth:grant-type:uma-ticket"));
        parameters.add(new BasicNameValuePair("client_id", "ChannelNetwork"));
        parameters.add(new BasicNameValuePair("audience", "ChannelNetwork"));
        post.addHeader("Authorization", token);
        post.addHeader("Content-Type", "application/x-www-form-urlencoded");
        parameters.add(new BasicNameValuePair("client_secret", getEnvironment().getProperty("cthKeySecret")));
        post.setEntity(new UrlEncodedFormEntity(parameters));
        HttpResponse response = client.execute(post);
        HttpEntity entity = ((CloseableHttpResponse) response).getEntity();
        String body = EntityUtils.toString(entity, "UTF-8");
        JSONObject obj = new JSONObject(body);
        String access_token = obj.getString("access_token");
        String[] tokenParts = access_token.split("\\.");
        Base64.Decoder decoder = Base64.getUrlDecoder();
        String payLoad = new String(decoder.decode(tokenParts[1]));
        JsonParser parser = new JsonParser();
        Object object = parser.parse(payLoad);
        jsonObject = (JsonObject) object;
        System.out.println(jsonObject);
        JsonObject a = jsonObject.getAsJsonObject("authorization");
        JsonArray jsonArray = a.getAsJsonArray("permissions");
        List<String> rsNamesList = new ArrayList<>();
        for (int i = 0; i < jsonArray.size(); i++)
        {
            JsonElement jsonElement = jsonArray.get(i);
            JsonObject names = jsonElement.getAsJsonObject();
            rsNamesList.add(names.get("rsname").toString());
        }
        return rsNamesList;
    }

    @Test
    public void MfrKeyCloakUserTest() throws Exception
    {
        token = generateCTHManufacturerToken();
        url = getEnvironment().getProperty("cthKeyCloakUrl");
        List<String> decodedToken = LoadEntitlements(url, token);
        Assert.assertTrue("token expected here",decodedToken.size() > 0);
        boolean isSubArray = checkSubListstring(decodedToken, expectedList);
        Assert.assertTrue("Expected keycloak source and received keycloak source are different", isSubArray);
        checkDataTypeandFileType();
        Assert.assertEquals(nucleusUsername,"\"cthmanufacturer\"");
    }

    @Test
    public void InowBaseNotKeyCloakUserTest() throws Exception
    {
        token = generateInowDataOwnerBaseToken();
        System.out.println(token);
        url = getEnvironment().getProperty("inowKeyCloakUrl");
        List<String> decodedToken = LoadEntitlements(url, token);
        System.out.println(decodedToken);
        Assert.assertTrue("token expected here",decodedToken.size() > 0);
        boolean isSubArray = checkSubListstring(decodedToken, expectedList);
        Assert.assertFalse("Expected keycloak source and received keycloak source are different", isSubArray);
        Assert.assertTrue(jsonObject.get("nucleusUsername")==null);
    }

    @Test
    public void CTHPartnerNotKeyCloakUserTest() throws Exception
    {
        token = generateCTHPartnerToken();
        System.out.println(token);
        url = getEnvironment().getProperty("cthKeyCloakUrl");
        List<String> decodedToken = LoadEntitlements(url, token);
        System.out.println(decodedToken);
        Assert.assertTrue("token expected here",decodedToken.size() > 0);
        boolean isSubArray = checkSubListstring(decodedToken, expectedList);
        Assert.assertFalse("Expected keycloak source and received keycloak source are different", isSubArray);
        Assert.assertEquals(jsonObject.get("nucleusUsername").toString(),"\"cthbase\"");
    }

    public void checkDataTypeandFileType() throws InterruptedException
    {
        nucleusUsername = jsonObject.get("nucleusUsername").toString();
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("customerSid", 2);
        paramMap.put("login", "cthmanufacturer");
        List data = queryForList(sql, List.class,paramMap);
        List<String> dataType = new ArrayList<>();
        List<String> fileType = new ArrayList<>();
        for(int i=0;i<data.size();i++)
        {
            String ds = data.get(i).toString();
            String json = ds.substring(1, ds.length() - 1);
            JsonParser parser = new JsonParser();
            Object obj = parser.parse(json);
            JsonObject jsonObject = (JsonObject) obj;
            Object dataType1 = jsonObject.get("dataType");
            String dt = dataType1.toString();
            dataType.add(dt);
            Object fileType1 = jsonObject.get("fileType");
            String ft = fileType1.toString();
            fileType.add(ft);
        }
        System.out.println(dataType);
        System.out.println(fileType);

        boolean flag = true;
        for(int i=0;i<fileType.size();i++){
            if(fileType.get(i) != "csv" || fileType.get(i) != "excel" || fileType.get(i) != "json" || fileType.get(i) != "csv" ){
                continue;
            }
            else {
                flag = false;
                break;
            }
        }

        Assert.assertTrue(flag);
    }
}
content_copyCOPY