import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}