blob: 49401dd87d2480104ec2f1fcb43a6ba519825dad [file] [log] [blame]
/*
* 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.vysper.xmpp.modules.roster;
import static org.apache.vysper.xmpp.modules.roster.AskSubscriptionType.ASK_SUBSCRIBE;
import static org.apache.vysper.xmpp.modules.roster.AskSubscriptionType.ASK_SUBSCRIBED;
import static org.apache.vysper.xmpp.modules.roster.AskSubscriptionType.NOT_SET;
import static org.apache.vysper.xmpp.modules.roster.RosterSubscriptionMutator.Result.ALREADY_SET;
import static org.apache.vysper.xmpp.modules.roster.RosterSubscriptionMutator.Result.FAILED;
import static org.apache.vysper.xmpp.modules.roster.RosterSubscriptionMutator.Result.ILLEGAL_ARGUMENT;
import static org.apache.vysper.xmpp.modules.roster.RosterSubscriptionMutator.Result.OK;
import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.BOTH;
import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.FROM;
import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.NONE;
import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.REMOVE;
import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.TO;
import junit.framework.TestCase;
import org.apache.vysper.xmpp.addressing.EntityFormatException;
import org.apache.vysper.xmpp.addressing.EntityImpl;
/**
*/
public class RosterSubscriptionMutatorTestCase extends TestCase {
@Override
public void setUp() {
// Add your code here
}
public void testAddSubscriptionRequest() {
checkAdd(NONE, NOT_SET, NOT_SET, ILLEGAL_ARGUMENT, null, null);
// most simple cases
checkAdd(NONE, NOT_SET, ASK_SUBSCRIBE, OK, NONE, ASK_SUBSCRIBE);
checkAdd(NONE, NOT_SET, ASK_SUBSCRIBED, OK, NONE, ASK_SUBSCRIBED);
// one existing subscription,
checkAdd(TO, NOT_SET, ASK_SUBSCRIBED, OK, TO, ASK_SUBSCRIBED);
checkAdd(FROM, NOT_SET, ASK_SUBSCRIBE, OK, FROM, ASK_SUBSCRIBE);
// status already set
checkAdd(TO, ASK_SUBSCRIBED, ASK_SUBSCRIBED, OK, null, null);
checkAdd(FROM, ASK_SUBSCRIBE, ASK_SUBSCRIBE, OK, null, null);
checkAdd(TO, NOT_SET, ASK_SUBSCRIBE, ALREADY_SET, null, null);
checkAdd(FROM, NOT_SET, ASK_SUBSCRIBED, ALREADY_SET, null, null);
// BOTH + pending is kind of illegal state. well anyway...
checkAdd(BOTH, NOT_SET, ASK_SUBSCRIBED, ALREADY_SET, null, null);
checkAdd(BOTH, NOT_SET, ASK_SUBSCRIBE, ALREADY_SET, null, null);
checkAdd(BOTH, ASK_SUBSCRIBED, ASK_SUBSCRIBED, ALREADY_SET, null, null);
checkAdd(BOTH, ASK_SUBSCRIBE, ASK_SUBSCRIBE, ALREADY_SET, null, null);
// special cases for conflicting SUBSCRIBE/SUBSCRIBED stati
checkAdd(NONE, ASK_SUBSCRIBED, ASK_SUBSCRIBE, OK, NONE, ASK_SUBSCRIBE);
checkAdd(NONE, ASK_SUBSCRIBE, ASK_SUBSCRIBED, FAILED, null, null);
}
public void testAddSubscription() {
checkAdd(NONE, NOT_SET, NONE, ILLEGAL_ARGUMENT, null, null);
checkAdd(BOTH, NOT_SET, NONE, ILLEGAL_ARGUMENT, null, null);
checkAdd(REMOVE, NOT_SET, NONE, ILLEGAL_ARGUMENT, null, null);
checkAdd(TO, NOT_SET, TO, ALREADY_SET, null, null);
checkAdd(FROM, NOT_SET, FROM, ALREADY_SET, null, null);
checkAdd(NONE, NOT_SET, FROM, OK, FROM, NOT_SET);
checkAdd(NONE, ASK_SUBSCRIBED, FROM, OK, FROM, NOT_SET);
checkAdd(NONE, ASK_SUBSCRIBE, FROM, OK, FROM, ASK_SUBSCRIBE);
checkAdd(NONE, NOT_SET, TO, OK, TO, NOT_SET);
checkAdd(NONE, ASK_SUBSCRIBE, TO, OK, TO, NOT_SET);
checkAdd(NONE, ASK_SUBSCRIBED, TO, OK, TO, ASK_SUBSCRIBED);
checkAdd(TO, NOT_SET, FROM, OK, BOTH, NOT_SET);
checkAdd(TO, ASK_SUBSCRIBED, FROM, OK, BOTH, NOT_SET);
checkAdd(TO, ASK_SUBSCRIBE, FROM, OK, BOTH, ASK_SUBSCRIBE);
checkAdd(FROM, NOT_SET, TO, OK, BOTH, NOT_SET);
checkAdd(FROM, ASK_SUBSCRIBE, TO, OK, BOTH, NOT_SET);
checkAdd(FROM, ASK_SUBSCRIBED, TO, OK, BOTH, ASK_SUBSCRIBED);
}
public void testRemoveSubscription() {
// TODO Add your code here
}
private void checkAdd(SubscriptionType initialSubscriptionType, AskSubscriptionType initialAskSubscriptionType,
SubscriptionType parameterSubscriptionType, RosterSubscriptionMutator.Result expectedResult,
SubscriptionType expectedSubscriptionType, AskSubscriptionType expectedAskSubscriptionType) {
RosterItem item = prepareItem(initialSubscriptionType, initialAskSubscriptionType);
// add parameterSubscriptionType
RosterSubscriptionMutator.Result subscriptionMutatorResult = new RosterSubscriptionMutator().add(item,
parameterSubscriptionType);
checkResult(initialSubscriptionType, initialAskSubscriptionType, expectedResult, expectedSubscriptionType,
expectedAskSubscriptionType, item, subscriptionMutatorResult);
}
private void checkAdd(SubscriptionType initialSubscriptionType, AskSubscriptionType initialAskSubscriptionType,
AskSubscriptionType parameterAskSubscriptionType, RosterSubscriptionMutator.Result expectedResult,
SubscriptionType expectedSubscriptionType, AskSubscriptionType expectedAskSubscriptionType) {
RosterItem item = prepareItem(initialSubscriptionType, initialAskSubscriptionType);
// add parameterSubscriptionType
RosterSubscriptionMutator.Result subscriptionMutatorResult = new RosterSubscriptionMutator().add(item,
parameterAskSubscriptionType);
checkResult(initialSubscriptionType, initialAskSubscriptionType, expectedResult, expectedSubscriptionType,
expectedAskSubscriptionType, item, subscriptionMutatorResult);
}
private void checkResult(SubscriptionType initialSubscriptionType, AskSubscriptionType initialAskSubscriptionType,
RosterSubscriptionMutator.Result expectedResult, SubscriptionType expectedSubscriptionType,
AskSubscriptionType expectedAskSubscriptionType, RosterItem item,
RosterSubscriptionMutator.Result subscriptionMutatorResult) {
assertEquals(expectedResult, subscriptionMutatorResult);
if (expectedSubscriptionType == null && expectedAskSubscriptionType == null) {
assertEquals(initialSubscriptionType, item.getSubscriptionType());
assertEquals(initialAskSubscriptionType, item.getAskSubscriptionType());
} else {
assertEquals(expectedSubscriptionType, item.getSubscriptionType());
assertEquals(expectedAskSubscriptionType, item.getAskSubscriptionType());
}
}
private RosterItem prepareItem(SubscriptionType initialSubscriptionType,
AskSubscriptionType initialAskSubscriptionType) {
EntityImpl jid = null;
try {
jid = EntityImpl.parse("test@test.org");
} catch (EntityFormatException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
RosterItem item = new RosterItem(jid, "group", initialSubscriptionType, initialAskSubscriptionType);
return item;
}
}