public void LevelUpBadgeTest()
 {
     var user = new DefaultUser("Language");
     var experience = new LanguageExperience("Language", ".\\Contents\\Level\\lvlUpTest.prop", "cs");
     experience.AddExperience(10);
     user.ExperiencePoints.Add("cs", experience);            
     var badge = new LanguageFirstCSharpLevel();
     badge.Compute(user);
     Assert.IsTrue(badge.Gained);
 }
 public void ModifedBadgeEarnedTest()
 {
     var model = new SVNModel();
     model.AddModified(2);
     var badge = new SVNModified();
     var p = new SVNPlugin();
     p.LoadDBMaps();
     p.LoadBadges();
     var user = new DefaultUser("teste");
     user.ExtensionPoint.Add("SVNExtension", model);
     badge.Compute(user);
     Assert.AreEqual(true, badge.Gained);            
 }
        public List<IUser> Read(string xmlPath)
        {
            log.InfoFormat("Reading svn : {0}", xmlPath);
            if (string.IsNullOrWhiteSpace(xmlPath))
            {
                throw new ArgumentNullException("xmlPath");
            }
            var result = new List<IUser>();
            try
            {
                var results = new Stack<IUser>();                
                var svnModel = new SVNModel();
                var doc = new XmlDocument();
                var xpath = string.Format("//logentry[@revision>'{0}']/paths/path", CurrentRevision);
                var xpathMaximumCurrentRevision = "/log/logentry/@revision[not(. < ../../logentry/@revision)][1]";
                var userDict = new Dictionary<string, IUser>();
                IUser user = null;
                doc.Load(xmlPath);
                CurrentRevision = Convert.ToInt32(doc.SelectNodes(xpathMaximumCurrentRevision)[0].Value) + 1;
                foreach (XmlNode node in doc.SelectNodes(xpath))
                {
                    var currentUser = node.ParentNode.ParentNode.SelectSingleNode("author").InnerText;
                    var currentDate = node.ParentNode.ParentNode.SelectSingleNode("date").InnerText;
                    log.DebugFormat("current user : {0}", currentUser);
                    log.DebugFormat("currnet date : {0}", currentDate);
                    if (userDict.Keys.Count > 0)
                    {
                        if (userDict.Keys.Contains(currentUser))
                        {
                            user = userDict[currentUser];
                        }
                        else
                        {
                            user = new DefaultUser(currentUser);
                            userDict.Add(currentUser, user);
                        }
                    }
                    else
                    {
                        user = new DefaultUser(currentUser);
                        userDict.Add(currentUser, user);
                    }



                    if (!(user.ExtensionPoint.Keys.Count > 0))
                    {
                        user.ExtensionPoint.Add("LanguageExtension", new LanguageBuilder());
                        user.ExtensionPoint.Add("SVNExtension", new SVNModel());
                    }

                    var action = node.Attributes["action"].Value;
                    var kind = node.InnerText;
                    var modelLanguage = LanguageBuilder.TransformPathToLanguageModel(kind);
                    ((LanguageBuilder)user.ExtensionPoint["LanguageExtension"]).AddLanguage(modelLanguage);

                    Infos.Add(SVNBuilder.AddInfo(action, currentUser,
                        DateTime.ParseExact(currentDate, "yyyy-MM-ddTHH:mm:ss.ffffffZ", CultureInfo.InstalledUICulture)));
                    user.ExtensionPoint["SVNExtension"] = SVNBuilder.AddAction(action, ((SVNModel)user.ExtensionPoint["SVNExtension"]));
                }

                
                foreach (var key in userDict.Keys)
                {
                    result.Add(userDict[key]);
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Message : {0}", ex.Message);
                log.ErrorFormat("StackTrace : {0}", ex.StackTrace);                
                return result;
            }
            return result;
        }