content: /**
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   * <p>
   * http://www.apache.org/licenses/LICENSE-2.0
   * <p>
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.atlas.repository.impexp;
  
  import org.apache.atlas.model.impexp.AtlasImportRequest;
  import org.apache.atlas.type.AtlasType;
  import org.testng.annotations.Test;
  
  import static org.testng.Assert.assertEquals;
  import static org.testng.Assert.assertNotNull;
  import static org.testng.Assert.assertNull;
  import static org.testng.Assert.assertTrue;
  
  public class AtlasImportRequestTest {
      @Test
      public void serializeAtlasImportRequstFromJsonWithEmptyOptions() {
          String jsonData = "{ \"options\": {} }";
  
          AtlasImportRequest request = AtlasType.fromJson(jsonData, AtlasImportRequest.class);
  
          assertNotNull(request);
          assertNotNull(request.getOptions());
          assertNull(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          ImportTransforms tr = ImportTransforms.fromJson(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          assertNull(tr);
      }
  
      @Test
      public void serializeOptions_VerifyAccessors() {
          String guid    = "\"abcd\"";
          String pos     = "\"1\"";
          String trueVal = "\"true\"";
  
          String jsonData = "{ \"options\": " +
                  "               {" +
                  "\"startGuid\":" + guid + "," +
                  "\"startPosition\":" + pos + "," +
                  "\"updateTypeDefinition\":" + trueVal +
                  "}" +
                  "}";
  
          AtlasImportRequest request = AtlasType.fromJson(jsonData, AtlasImportRequest.class);
  
          assertNotNull(request);
          assertNotNull(request.getStartGuid());
          assertNotNull(request.getStartPosition());
          assertNotNull(request.getUpdateTypeDefs());
  
          assertEquals(request.getStartGuid(), guid.replace("\"", ""));
          assertEquals(request.getStartPosition(), pos.replace("\"", ""));
          assertEquals(request.getUpdateTypeDefs(), trueVal.replace("\"", ""));
      }
  
      @Test
      public void optionsDefaultsTest() {
          String jsonData = "{ \"options\": " +
                  "               {" +
                  "}" +
                  "}";
  
          AtlasImportRequest request = AtlasType.fromJson(jsonData, AtlasImportRequest.class);
  
          assertNotNull(request);
          assertNull(request.getStartGuid());
          assertNull(request.getStartPosition());
          assertNull(request.getUpdateTypeDefs());
      }
  
      @Test
      public void serializeAtlasImportRequstFromJsonWithEmptyTransforms() {
          String jsonData = "{ \"options\": { \"transforms\": \"{ }\" } }";
  
          AtlasImportRequest request = AtlasType.fromJson(jsonData, AtlasImportRequest.class);
  
          assertNotNull(request);
          assertNotNull(request.getOptions());
          assertNotNull(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          ImportTransforms tr = ImportTransforms.fromJson(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          assertNotNull(tr);
          assertNotNull(tr.getTransforms());
          assertEquals(tr.getTransforms().size(), 0);
      }
  
      @Test
      public void serializeAtlasImportRequstFromJsonWith1Transform() {
          String jsonData = "{ \"options\": { \"transforms\": \"{ \\\"hive_db\\\": { \\\"qualifiedName\\\": [ \\\"replace~@cl1~@cl2\\\" ] } }\" } }";
  
          AtlasImportRequest request = AtlasType.fromJson(jsonData, AtlasImportRequest.class);
  
          assertNotNull(request);
          assertNotNull(request.getOptions());
          assertNotNull(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          ImportTransforms tr = ImportTransforms.fromJson(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          assertNotNull(tr);
          assertNotNull(tr.getTransforms());
          assertEquals(tr.getTransforms().size(), 1);
          assertTrue(tr.getTransforms().containsKey("hive_db"));
          assertEquals(tr.getTransforms("hive_db").entrySet().size(), 1);
          assertTrue(tr.getTransforms("hive_db").containsKey("qualifiedName"));
          assertEquals(tr.getTransforms("hive_db").get("qualifiedName").size(), 1);
      }
  
      @Test
      public void serializeAtlasImportRequstFromJson() {
          String jsonData = "{ \"options\": { \"transforms\": \"{ \\\"hive_db\\\": { \\\"qualifiedName\\\": [ \\\"replace~@cl1~@cl2\\\" ] }, \\\"hive_table\\\": { \\\"qualifiedName\\\": [ \\\"lowercase\\\", \\\"replace~@cl1~@cl2\\\" ] } }\" } } }";
  
          AtlasImportRequest request = AtlasType.fromJson(jsonData, AtlasImportRequest.class);
  
          assertNotNull(request);
          assertNotNull(request.getOptions());
          assertNotNull(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          ImportTransforms tr = ImportTransforms.fromJson(request.getOptions().get(AtlasImportRequest.TRANSFORMS_KEY));
  
          assertNotNull(tr);
          assertNotNull(tr.getTransforms());
          assertEquals(tr.getTransforms().size(), 2);
          assertTrue(tr.getTransforms().containsKey("hive_db"));
          assertEquals(tr.getTransforms("hive_db").entrySet().size(), 1);
          assertTrue(tr.getTransforms("hive_db").containsKey("qualifiedName"));
          assertEquals(tr.getTransforms("hive_db").get("qualifiedName").size(), 1);
          assertTrue(tr.getTransforms().containsKey("hive_table"));
          assertEquals(tr.getTransforms("hive_table").entrySet().size(), 1);
          assertTrue(tr.getTransforms("hive_table").containsKey("qualifiedName"));
          assertEquals(tr.getTransforms("hive_table").get("qualifiedName").size(), 2);
      }
  }
  