blob: f819dacdca4fa37eb8a624b45c16b45dafc1aed6 [file] [log] [blame]
// Copyright (C) 2009 The Android Open Source Project
//
// 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.gerrit.server.mail;
import static org.easymock.EasyMock.createStrictMock;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import com.google.gerrit.reviewdb.Account;
import com.google.gerrit.reviewdb.AccountExternalId;
import com.google.gerrit.reviewdb.AccountGroup;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountState;
import junit.framework.TestCase;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.PersonIdent;
import java.util.Collections;
public class FromAddressGeneratorProviderTest extends TestCase {
private Config config;
private PersonIdent ident;
private AccountCache accountCache;
@Override
protected void setUp() throws Exception {
super.setUp();
config = new Config();
ident = new PersonIdent("NAME", "e@email", 0, 0);
accountCache = createStrictMock(AccountCache.class);
}
private FromAddressGenerator create() {
return new FromAddressGeneratorProvider(config, ident, accountCache).get();
}
private void setFrom(final String newFrom) {
config.setString("sendemail", null, "from", newFrom);
}
public void testDefaultIsMIXED() {
assertTrue(create() instanceof FromAddressGeneratorProvider.PatternGen);
}
public void testSelectUSER() {
setFrom("USER");
assertTrue(create() instanceof FromAddressGeneratorProvider.UserGen);
setFrom("user");
assertTrue(create() instanceof FromAddressGeneratorProvider.UserGen);
setFrom("uSeR");
assertTrue(create() instanceof FromAddressGeneratorProvider.UserGen);
}
public void testUSER_FullyConfiguredUser() {
setFrom("USER");
final String name = "A U. Thor";
final String email = "a.u.thor@test.example.com";
final Account.Id user = user(name, email);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals(name, r.name);
assertEquals(email, r.email);
verify(accountCache);
}
public void testUSER_NoFullNameUser() {
setFrom("USER");
final String email = "a.u.thor@test.example.com";
final Account.Id user = user(null, email);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals(null, r.name);
assertEquals(email, r.email);
verify(accountCache);
}
public void testUSER_NoPreferredEmailUser() {
setFrom("USER");
final Account.Id user = user("A U. Thor", null);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals(ident.getName(), r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testUSER_NullUser() {
setFrom("USER");
replay(accountCache);
final Address r = create().from(null);
assertNotNull(r);
assertEquals(ident.getName(), r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testSelectSERVER() {
setFrom("SERVER");
assertTrue(create() instanceof FromAddressGeneratorProvider.ServerGen);
setFrom("server");
assertTrue(create() instanceof FromAddressGeneratorProvider.ServerGen);
setFrom("sErVeR");
assertTrue(create() instanceof FromAddressGeneratorProvider.ServerGen);
}
public void testSERVER_FullyConfiguredUser() {
setFrom("SERVER");
final String name = "A U. Thor";
final String email = "a.u.thor@test.example.com";
final Account.Id user = userNoLookup(name, email);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals(ident.getName(), r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testSERVER_NullUser() {
setFrom("SERVER");
replay(accountCache);
final Address r = create().from(null);
assertNotNull(r);
assertEquals(ident.getName(), r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testSelectMIXED() {
setFrom("MIXED");
assertTrue(create() instanceof FromAddressGeneratorProvider.PatternGen);
setFrom("mixed");
assertTrue(create() instanceof FromAddressGeneratorProvider.PatternGen);
setFrom("mIxEd");
assertTrue(create() instanceof FromAddressGeneratorProvider.PatternGen);
}
public void testMIXED_FullyConfiguredUser() {
setFrom("MIXED");
final String name = "A U. Thor";
final String email = "a.u.thor@test.example.com";
final Account.Id user = user(name, email);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals(name + " (Code Review)", r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testMIXED_NoFullNameUser() {
setFrom("MIXED");
final String email = "a.u.thor@test.example.com";
final Account.Id user = user(null, email);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals("Anonymous Coward (Code Review)", r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testMIXED_NoPreferredEmailUser() {
setFrom("MIXED");
final String name = "A U. Thor";
final Account.Id user = user(name, null);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals(name + " (Code Review)", r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testMIXED_NullUser() {
setFrom("MIXED");
replay(accountCache);
final Address r = create().from(null);
assertNotNull(r);
assertEquals(ident.getName(), r.name);
assertEquals(ident.getEmailAddress(), r.email);
verify(accountCache);
}
public void testCUSTOM_FullyConfiguredUser() {
setFrom("A ${user} B <my.server@email.address>");
final String name = "A U. Thor";
final String email = "a.u.thor@test.example.com";
final Account.Id user = user(name, email);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals("A " + name + " B", r.name);
assertEquals("my.server@email.address", r.email);
verify(accountCache);
}
public void testCUSTOM_NoFullNameUser() {
setFrom("A ${user} B <my.server@email.address>");
final String email = "a.u.thor@test.example.com";
final Account.Id user = user(null, email);
replay(accountCache);
final Address r = create().from(user);
assertNotNull(r);
assertEquals("A Anonymous Coward B", r.name);
assertEquals("my.server@email.address", r.email);
verify(accountCache);
}
public void testCUSTOM_NullUser() {
setFrom("A ${user} B <my.server@email.address>");
replay(accountCache);
final Address r = create().from(null);
assertNotNull(r);
assertEquals(ident.getName(), r.name);
assertEquals("my.server@email.address", r.email);
verify(accountCache);
}
private Account.Id user(final String name, final String email) {
final AccountState s = makeUser(name, email);
expect(accountCache.get(eq(s.getAccount().getId()))).andReturn(s);
return s.getAccount().getId();
}
private Account.Id userNoLookup(final String name, final String email) {
final AccountState s = makeUser(name, email);
return s.getAccount().getId();
}
private AccountState makeUser(final String name, final String email) {
final Account.Id userId = new Account.Id(42);
final Account account = new Account(userId);
account.setFullName(name);
account.setPreferredEmail(email);
final AccountState s =
new AccountState(account, Collections.<AccountGroup.Id> emptySet(),
Collections.<AccountExternalId> emptySet());
return s;
}
}