/**
* ***************************************************************************
* Copyright (c) 2010 Qcadoo Limited
* Project: Qcadoo MES
* Version: 1.4
*
* This file is part of Qcadoo.
*
* Qcadoo is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* ***************************************************************************
*/
package com.qcadoo.mes.states.messages.util;
import static com.qcadoo.mes.states.messages.util.MessagesUtil.ARGS_SEPARATOR;
import static com.qcadoo.mes.states.messages.util.MessagesUtil.joinArgs;
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.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import java.util.List;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.qcadoo.mes.states.messages.constants.MessageFields;
import com.qcadoo.mes.states.messages.constants.StateMessageType;
import com.qcadoo.model.api.Entity;
import com.qcadoo.model.api.EntityList;
public class MessagesUtilTest {
@Test
public final void shouldReturnJoinedString() {
// given
final String[] splittedArgs = new String[] { "mes", "plugins", "states", "test" };
// when
final String joinedString = MessagesUtil.joinArgs(splittedArgs);
// then
final String expectedString = splittedArgs[0] + ARGS_SEPARATOR + splittedArgs[1] + ARGS_SEPARATOR + splittedArgs[2]
+ ARGS_SEPARATOR + splittedArgs[3];
assertEquals(expectedString, joinedString);
}
@Test
public final void shouldReturnSplittedString() {
// given
final String arg1 = "mes";
final String arg2 = "plugins";
final String arg3 = "states";
final String arg4 = "test";
final String joinedArgs = arg1 + ARGS_SEPARATOR + arg2 + ARGS_SEPARATOR + arg3 + ARGS_SEPARATOR + arg4;
// when
final String[] splittedString = MessagesUtil.splitArgs(joinedArgs);
// then
assertEquals(4, splittedString.length);
assertEquals(arg1, splittedString[0]);
assertEquals(arg2, splittedString[1]);
assertEquals(arg3, splittedString[2]);
assertEquals(arg4, splittedString[3]);
}
@Test
public final void shouldReturnEmptyArrayIfGivenJoinedStringIsNull() {
// when
final String[] splittedString = MessagesUtil.splitArgs(null);
// then
assertNotNull(splittedString);
assertEquals(0, splittedString.length);
}
@Test
public final void shouldReturnEmptyArrayIfGivenJoinedStringIsEmpty() {
// when
final String[] splittedString = MessagesUtil.splitArgs("");
// then
assertNotNull(splittedString);
assertEquals(0, splittedString.length);
}
@Test
public final void shouldReturnEmptyArrayIfGivenJoinedStringIsBlank() {
// when
final String[] splittedString = MessagesUtil.splitArgs(" ");
// then
assertNotNull(splittedString);
assertEquals(0, splittedString.length);
}
@Test
public final void shouldReturnNullIfGivenSplittedStringIsNull() {
// when
final String joinedString = MessagesUtil.joinArgs(null);
// then
assertNull(joinedString);
}
@Test
public final void shouldReturnNullIfGivenSplittedStringIsEmpty() {
// when
final String joinedString = MessagesUtil.joinArgs(new String[] {});
// then
assertNull(joinedString);
}
@Test
public final void shouldHasFailureMessagesReturnTrue() {
// given
List<Entity> messages = Lists.newArrayList();
messages.add(mockMessage(StateMessageType.FAILURE, "test"));
EntityList messagesEntityList = mockEntityList(messages);
// when
boolean result = MessagesUtil.hasFailureMessages(messagesEntityList);
// then
assertTrue(result);
}
@Test
public final void shouldHasFailureMessagesReturnFalse() {
// given
List<Entity> messages = Lists.newArrayList();
messages.add(mockMessage(StateMessageType.SUCCESS, "test"));
EntityList messagesEntityList = mockEntityList(messages);
// when
boolean result = MessagesUtil.hasFailureMessages(messagesEntityList);
// then
assertFalse(result);
}
@Test
public final void shouldHasFailureMessagesReturnFalseForEmptyMessages() {
// given
List<Entity> messages = Lists.newArrayList();
EntityList messagesEntityList = mockEntityList(messages);
// when
boolean result = MessagesUtil.hasFailureMessages(messagesEntityList);
// then
assertFalse(result);
}
@Test
public final void shouldIsAutoClosedReturnFalseIfFieldValueIsFalse() {
// given
final Entity message = mock(Entity.class);
given(message.getField(MessageFields.AUTO_CLOSE)).willReturn(false);
given(message.getBooleanField(MessageFields.AUTO_CLOSE)).willReturn(false);
// when
final boolean result = MessagesUtil.isAutoClosed(message);
// then
assertFalse(result);
}
@Test
public final void shouldIsAutoClosedReturnFalseIfFieldValueIsTrue() {
// given
final Entity message = mock(Entity.class);
given(message.getField(MessageFields.AUTO_CLOSE)).willReturn(true);
given(message.getBooleanField(MessageFields.AUTO_CLOSE)).willReturn(true);
// when
final boolean result = MessagesUtil.isAutoClosed(message);
// then
assertTrue(result);
}
@Test
public final void shouldIsAutoClosedReturnFalseIfFieldValueIsNull() {
// given
final Entity message = mock(Entity.class);
given(message.getField(MessageFields.AUTO_CLOSE)).willReturn(null);
given(message.getBooleanField(MessageFields.AUTO_CLOSE)).willReturn(false);
// when
final boolean result = MessagesUtil.isAutoClosed(message);
// then
assertTrue(result);
}
private EntityList mockEntityList(final List<Entity> entities) {
EntityList entityList = mock(EntityList.class);
given(entityList.iterator()).willReturn(entities.iterator());
given(entityList.isEmpty()).willReturn(entities.isEmpty());
return entityList;
}
private Entity mockMessage(final StateMessageType type, final String translationKey, final String... translationArgs) {
Entity message = mock(Entity.class);
mockEntityField(message, MessageFields.TYPE, type);
mockEntityField(message, MessageFields.TRANSLATION_KEY, translationKey);
mockEntityField(message, MessageFields.TRANSLATION_ARGS, joinArgs(translationArgs));
return message;
}
private void mockEntityField(final Entity entity, final String fieldName, final Object fieldValue) {
given(entity.getField(fieldName)).willReturn(fieldValue);
given(entity.getStringField(fieldName)).willReturn(fieldValue == null ? null : fieldValue.toString());
}
}