Welcome to MSDN Blogs Sign in | Join | Help
Toby and the mega-class deletion

So it's become obvious that having a large, all-encompassing EDMSystem class was probably not the way to go. It did give us a way to express what we wanted our acceptance tests to do, but the time has come to bite the bullet and take a look at where the system is going.

With the ProjectRepository taking care of Create and Find for Project, EDMSystem can be replaced with a combination of UserService and the repository.

[TestFixture]
public class UserServiceFixture
{
  [
Test]
  
public void OnCreationNoOneIsLoggedIn()
  {
    
UserService userService = new UserService();

    
UserType currentUser = userService.CurrentUser;

    
Assert.Equal<UserType>(UserType.None, currentUser);
  }

  [
Test]
  
public void CanSuccessfullyLoginAsAdministrator()
  {
    
UserService userService = new UserService();

    userService.LoginAs(
UserType.Administrator);

    
Assert.Equal<UserType>(UserType.Administrator, userService.CurrentUser);
  }

  [
Test]
  
public void CanSuccessfullyLoginAsNonAdministrator()
  {
    
UserService userService = new UserService();

    userService.LoginAs(
UserType.Bob);

    
Assert.Equal<UserType>(UserType.Bob, userService.CurrentUser);
  }
}

public class UserService : IUserService
{
  
public UserType CurrentUser
  {
    
get { return currentUser; }
  }

  
internal void LoginAs(UserType userType)
  {
    currentUser = userType;
  }

  
private UserType currentUser;
}

public interface IUserService
{
  
UserType CurrentUser { get; }
}

public enum UserType
{
  None,
  Administrator,
  Bob,
  Joe
}

One small change - I added a UserType of None. With this new class, we can go back and update the acceptance tests. I won't bother pasting them here, but obviously EDMSystem is gone and in its place we have a UserService and ProjectRepository. 10 of the 13 acceptance tests currently pass.

Posted: Saturday, September 01, 2007 4:58 PM by casper

Comments

No Comments

Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker