/*
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.syncope.fit.core;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
import javax.ws.rs.core.Response;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.AnyTypeClassTO;
import org.apache.syncope.common.lib.to.DerSchemaTO;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.syncope.common.lib.types.AttrSchemaType;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.SchemaType;
import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
import org.apache.syncope.fit.AbstractITCase;
import org.junit.Test;
public class AnyTypeClassITCase extends AbstractITCase {
@Test
public void read() {
AnyTypeClassTO minimalGroup = anyTypeClassService.read("minimal group");
assertNotNull(minimalGroup);
assertFalse(minimalGroup.getPlainSchemas().isEmpty());
assertFalse(minimalGroup.getDerSchemas().isEmpty());
assertFalse(minimalGroup.getVirSchemas().isEmpty());
}
@Test
public void list() {
List<AnyTypeClassTO> list = anyTypeClassService.list();
assertFalse(list.isEmpty());
}
@Test
public void crud() {
// 1. create sample schemas
PlainSchemaTO plainSchema = new PlainSchemaTO();
plainSchema.setKey("new_plain_schema" + getUUIDString());
plainSchema.setType(AttrSchemaType.String);
plainSchema = createSchema(SchemaType.PLAIN, plainSchema);
DerSchemaTO derSchema = new DerSchemaTO();
derSchema.setKey("new_der_schema" + getUUIDString());
derSchema.setExpression(plainSchema.getKey() + " + '_' + derived_dx");
derSchema = createSchema(SchemaType.DERIVED, derSchema);
// 2. actual CRUD
AnyTypeClassTO newClass = new AnyTypeClassTO();
newClass.setKey("new class" + getUUIDString());
newClass.getPlainSchemas().add(plainSchema.getKey());
Response response = anyTypeClassService.create(newClass);
assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusInfo().getStatusCode());
newClass = getObject(response.getLocation(), AnyTypeClassService.class, AnyTypeClassTO.class);
assertNotNull(newClass);
assertFalse(newClass.getPlainSchemas().isEmpty());
assertTrue(newClass.getDerSchemas().isEmpty());
assertTrue(newClass.getVirSchemas().isEmpty());
newClass.getDerSchemas().add(derSchema.getKey());
anyTypeClassService.update(newClass);
newClass = anyTypeClassService.read(newClass.getKey());
assertNotNull(newClass);
assertFalse(newClass.getPlainSchemas().isEmpty());
assertFalse(newClass.getDerSchemas().isEmpty());
assertTrue(newClass.getVirSchemas().isEmpty());
assertEquals(newClass.getKey(), schemaService.read(SchemaType.PLAIN, plainSchema.getKey()).getAnyTypeClass());
assertEquals(newClass.getKey(), schemaService.read(SchemaType.DERIVED, derSchema.getKey()).getAnyTypeClass());
anyTypeClassService.delete(newClass.getKey());
try {
anyTypeClassService.read(newClass.getKey());
fail();
} catch (SyncopeClientException e) {
assertEquals(ClientExceptionType.NotFound, e.getType());
}
assertNull(schemaService.read(SchemaType.PLAIN, plainSchema.getKey()).getAnyTypeClass());
assertNull(schemaService.read(SchemaType.DERIVED, derSchema.getKey()).getAnyTypeClass());
}
@Test
public void deleteSchema() {
PlainSchemaTO newSchema = new PlainSchemaTO();
newSchema.setKey("newSchema" + getUUIDString());
newSchema.setType(AttrSchemaType.Date);
createSchema(SchemaType.PLAIN, newSchema);
AnyTypeClassTO newClass = new AnyTypeClassTO();
newClass.setKey("new class" + getUUIDString());
newClass.getPlainSchemas().add(newSchema.getKey());
Response response = anyTypeClassService.create(newClass);
assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusInfo().getStatusCode());
newClass = getObject(response.getLocation(), AnyTypeClassService.class, AnyTypeClassTO.class);
assertNotNull(newClass);
assertTrue(newClass.getPlainSchemas().contains(newSchema.getKey()));
schemaService.delete(SchemaType.PLAIN, newSchema.getKey());
newClass = anyTypeClassService.read(newClass.getKey());
assertNotNull(newClass);
assertFalse(newClass.getPlainSchemas().contains(newSchema.getKey()));
}
@Test
public void issueSYNCOPE759() {
AnyTypeClassTO minimalGroup = anyTypeClassService.read("minimal group");
assertNotNull(minimalGroup);
AnyTypeClassTO newAnyTypeClass = new AnyTypeClassTO();
newAnyTypeClass.setKey(minimalGroup.getKey());
try {
anyTypeClassService.create(newAnyTypeClass);
fail();
} catch (SyncopeClientException e) {
assertEquals(ClientExceptionType.EntityExists, e.getType());
}
}
}