/*
* Copyright 2012 Nodeable 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.streamreduce.core.model;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.streamreduce.util.JSONObjectBuilder;
import net.sf.json.JSONObject;
import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class UserTest {
@Test
public void testCreateUserFromBuilder() {
//Happy path test that builds a user
new User.Builder()
.username("maynard_keenan")
.account(new Account.Builder().name("ABC").build()).build();
}
@Test(expected = IllegalStateException.class)
public void testCreateUserWithoutUsername() {
new User.Builder().account(new Account.Builder().name("ABC").build()).build();
}
@Test
public void testCreateUserWithoutAccount() {
//Exercises that a user can be built without being associated with an account
new User.Builder().username("adam_jones").build();
}
@Test
public void testCreateUserFromBuilderBasedOnExistingUser() {
//Exercises the User.Builder constructor that accepts a User instance and populates the object being built with
//copies of that User's properties.
User original = new User.Builder()
.username("maynard_keenan")
.alias("maynard")
.fullname("Maynard James Keenan")
.roles(Sets.newHashSet(new Role("badass")))
.account(new Account.Builder().name("ABC").build()).build();
User copy = new User.Builder(original).build();
Assert.assertEquals(original,copy);
}
@Test
public void testCreateUserFromBuilderCreatesValidAliasIfNotSpecified() {
//When alias isn't specified on a user builder, make sure we make the alias a
User original = new User.Builder()
.username("maynard@toolband.com")
.fullname("Maynard James Keenan")
.roles(Sets.newHashSet(new Role("badass")))
.account(new Account.Builder().name("ABC").build()).build();
Assert.assertEquals("maynard_at_toolband_com",original.alias);
}
@Test
public void testCreateUserFromBuilderCreatesValidAliasIfNotSpecifiedRetainsDashes() {
//When alias isn't specified on a user builder, make sure we make the alias a
User original = new User.Builder()
.username("maynard-keenan@toolband.com")
.fullname("Maynard James Keenan")
.roles(Sets.newHashSet(new Role("badass")))
.account(new Account.Builder().name("ABC").build()).build();
Assert.assertEquals("maynard-keenan_at_toolband_com",original.alias);
}
@Test
public void testUserNotificationsInConfigByDefault() {
//Makes sure that new user has notifications in config by default
User user = createValidUser();
Map<String,Object> config = user.getConfig();
assertTrue(Boolean.valueOf(config.get(User.ConfigKeys.RECEIVES_COMMENT_NOTIFICATIONS).toString()));
assertTrue(Boolean.valueOf(config.get(User.ConfigKeys.RECEIVES_NEW_MESSAGE_NOTIFICATIONS).toString()));
}
@Test
@SuppressWarnings("unused")
public void testSetConfigValue() {
User user = createValidUser();
//String
user.setConfigValue("foo","bar");
assertEquals("bar", user.getConfig().get("foo"));
//Boolean
user.setConfigValue("foo",true);
assertEquals(true, user.getConfig().get("foo"));
//Number
user.setConfigValue("foo",5.5);
assertEquals(5.5, user.getConfig().get("foo"));
List list = Lists.newArrayList(1,2,3,4);
user.setConfigValue("foo",list );
assertEquals(list , user.getConfig().get("foo"));
//Map (based on JSONObject)
JSONObject jsonObject = new JSONObjectBuilder().add("a","bar").add("b",5).build();
user.setConfigValue("foo",jsonObject );
assertEquals(new HashMap(jsonObject), user.getConfig().get("foo"));
}
@Test(expected = IllegalArgumentException.class)
public void testRemoveConfigValue_gravatarHash() {
User user = createValidUser();
user.removeConfigValue(User.ConfigKeys.GRAVATAR_HASH);
}
@Test(expected = IllegalArgumentException.class)
public void testRemoveConfigValue_receivesCommentNotifications() {
User user = createValidUser();
user.removeConfigValue(User.ConfigKeys.RECEIVES_COMMENT_NOTIFICATIONS);
}
@Test(expected = IllegalArgumentException.class)
public void testRemoveConfigValue_receivesNewMessageNotifications() {
User user = createValidUser();
user.removeConfigValue(User.ConfigKeys.RECEIVES_NEW_MESSAGE_NOTIFICATIONS);
}
@Test
public void testRemoveConfigValue() {
User user = createValidUser();
user.setConfigValue("foo","bar");
assertEquals("bar",user.getConfig().get("foo"));
user.removeConfigValue("foo");
assertEquals(null,user.getConfig().get("foo"));
}
private User createValidUser() {
User user = new User.Builder()
.username("maynard-keenan@toolband.com")
.fullname("Maynard James Keenan")
.roles(Sets.newHashSet(new Role("badass")))
.account(new Account.Builder().name("ABC").build()).build();
return user;
}
}