/*
* Copyright (c) 2015 Google Inc.
*
* Licensed 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 com.google.appengine.sparkdemo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import com.google.cloud.datastore.Datastore;
import com.google.cloud.datastore.DatastoreOptions;
import com.google.cloud.datastore.Entity;
import com.google.cloud.datastore.Key;
import com.google.cloud.datastore.Query;
import com.google.cloud.datastore.QueryResults;
import com.google.cloud.datastore.StructuredQuery;
import com.google.cloud.datastore.testing.LocalDatastoreHelper;
import com.google.common.collect.Iterators;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.threeten.bp.Duration;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeoutException;
public class UserServiceTest {
private static final LocalDatastoreHelper HELPER = LocalDatastoreHelper.create(1.0);
private static final DatastoreOptions DATASTORE_OPTIONS = HELPER.getOptions();
private static final Datastore DATASTORE = DATASTORE_OPTIONS.getService();
private static final String KIND = "DemoUser";
private static final UserService USER_SERVICE = new UserService(DATASTORE, KIND);
private static final String USER_ID = "myId";
private static final String USER_NAME = "myName";
private static final String USER_EMAIL = "my@email.com";
private static final User USER = new User(USER_ID, USER_NAME, USER_EMAIL);
private static final Key USER_KEY =
Key.newBuilder(DATASTORE_OPTIONS.getProjectId(), KIND, USER_ID).build();
private static final Entity USER_RECORD = Entity.newBuilder(USER_KEY)
.set("id", USER_ID)
.set("name", USER_NAME)
.set("email", USER_EMAIL)
.build();
@BeforeClass
public static void beforeClass() throws IOException, InterruptedException {
HELPER.start();
}
@Before
public void setUp() {
StructuredQuery<Key> query = Query.newKeyQueryBuilder().build();
QueryResults<Key> result = DATASTORE.run(query);
DATASTORE.delete(Iterators.toArray(result, Key.class));
DATASTORE.add(USER_RECORD);
}
@AfterClass
public static void afterClass() throws IOException, InterruptedException, TimeoutException {
HELPER.stop(Duration.ofMinutes(1));
}
@Test
public void testGetAllUsers() {
List<User> allUsers = USER_SERVICE.getAllUsers();
assertEquals(1, allUsers.size());
User actualUser = allUsers.get(0);
assertEquals(USER.getId(), actualUser.getId());
assertEquals(USER.getName(), actualUser.getName());
assertEquals(USER.getEmail(), actualUser.getEmail());
}
@Test
public void testCreateUser() {
String name = "myNewName";
String email = "mynew@email.com";
User actualUser = USER_SERVICE.createUser(name, email);
assertEquals(name, actualUser.getName());
assertEquals(email, actualUser.getEmail());
assertNotNull(actualUser.getId());
try {
USER_SERVICE.createUser(null, email);
fail("Expected to fail because name is null.");
} catch (IllegalArgumentException e) {
assertEquals("Parameter 'name' cannot be empty", e.getMessage());
}
try {
USER_SERVICE.createUser(name, null);
fail("Expected to fail because email is null.");
} catch (IllegalArgumentException e) {
assertEquals("Parameter 'email' cannot be empty", e.getMessage());
}
}
@Test
public void testDeleteUser() {
String result = USER_SERVICE.deleteUser(USER_ID);
assertEquals("ok", result);
assertNull(DATASTORE.get(USER_KEY));
}
@Test
public void testUpdateUser() {
String newName = "myNewName";
String newEmail = "mynew@email.com";
User updatedUser = USER_SERVICE.updateUser(USER_ID, newName, newEmail);
assertEquals(USER_ID, updatedUser.getId());
assertEquals(newName, updatedUser.getName());
assertEquals(newEmail, updatedUser.getEmail());
try {
USER_SERVICE.updateUser(USER_ID, null, USER_EMAIL);
fail("Expected to fail because name is null.");
} catch (IllegalArgumentException e) {
assertEquals("Parameter 'name' cannot be empty", e.getMessage());
}
try {
USER_SERVICE.updateUser(USER_ID, USER_NAME, null);
fail("Expected to fail because email is null.");
} catch (IllegalArgumentException e) {
assertEquals("Parameter 'email' cannot be empty", e.getMessage());
}
}
}