// check if user <@param user name> is the publisher of the discussion d.
 public static bool checkPublisherAuthorization(Discussion d, string userName, string password)
 {
     User publisher = d.publisher;
     if (publisher != null && publisher.password == password && publisher.isLogged())
         return true;
     return false;
 }
 public Comment(string content, User user, Discussion parentDiscussion)
 {
     this.content = content;
     this.publishDate = DateTime.Now;
     this.publisher = user;
     this.parentDiscussion = parentDiscussion;
 }
 // POCO constructor
 public Discussion(Discussion d)
 {
     this.discussionId = d.discussionId;
     this.title = d.title;
     this.content = d.content;
     this.publishDate = d.publishDate;
     this.publisher = new User(d.publisher);
     this.comments = null;
     this.parentSubForum = null;
 }
        private int testGetResponsersForSingleUser()
        {
            {
                int testNum = 0;

                List<User> res;

                /* success tests */
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User[] users = new User[10];
                    for(int i=0; i<10; i++)
                        users[i] = this.bridge.register(forum.forumId, "user"+i, "pswd"+i, "", "");

                    res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, users[5].userName);
                    AssertTrue(res.Count == 0);

                    for (int i = 0; i < 10; i++)
                        this.bridge.login(forum.forumId, users[i].userName, users[i].password);
                    Discussion[] discussions = new Discussion[30];
                    for (int i = 0; i < 30; i++)
                        discussions[i] = this.bridge.createNewDiscussion(users[i % 10].userName, users[i % 10].password, forum.forumId, subForum.subForumId, "discussion" + i, "no content");
                    res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, users[5].userName);
                    AssertTrue(res.Count == 0);

                    for (int i = 0; i < 10; i++)
                        this.bridge.createNewComment(users[i].userName, users[i].password, forum.forumId, subForum.subForumId, discussions[0].discussionId, "no content");

                    res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, users[0].userName);
                    AssertTrue(res.Count == 9); // 9- because it doesn't include user[0] (publisher)

                    testNum++;
                }
                catch { failMsg(testNum); }

                this.bridge.reset();

                /* failure tests */

                // wrong userName
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User[] users = new User[10];
                    for (int i = 0; i < 10; i++)
                        users[i] = this.bridge.register(forum.forumId, "user" + i, "pswd" + i, "", "");

                    res = this.bridge.getResponsersForSingleUser("wrong user", ADMIN_PSWD, forum.forumId, users[5].userName);
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                // wrong password
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User[] users = new User[10];
                    for (int i = 0; i < 10; i++)
                        users[i] = this.bridge.register(forum.forumId, "user" + i, "pswd" + i, "", "");

                    res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, "wrong pass", forum.forumId, users[5].userName);
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                // wrong forumId
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User[] users = new User[10];
                    for (int i = 0; i < 10; i++)
                        users[i] = this.bridge.register(forum.forumId, "user" + i, "pswd" + i, "", "");

                    res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, 300000000, users[5].userName);
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                // wrong username of required user
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User[] users = new User[10];
                    for (int i = 0; i < 10; i++)
                        users[i] = this.bridge.register(forum.forumId, "user" + i, "pswd" + i, "", "");

                    res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "wrong user");
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                return testNum;
            }
        }
        private int testGetNumOfCommentsSubForum()
        {
            {
                this.bridge.reset();
                int testNum = 0;

                int res;

                /* success tests */
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User user1 = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                    User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");

                    res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                    AssertTrue(res==0);

                    user1 = this.bridge.login(forum.forumId, "user1", "pswd1");
                    user2 = this.bridge.login(forum.forumId, "user2", "pswd2");
                    Discussion[] discussions = new Discussion[100];
                    for (int i=0; i<100; i++)
                        discussions[i] = this.bridge.createNewDiscussion("user1", "pswd1", forum.forumId, subForum.subForumId, "discussion" + i, "no content");
                    res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                    AssertTrue(res == 100);

                    for (int i = 1; i <= 50; i++)
                    {
                        this.bridge.createNewComment("user1", "pswd1", forum.forumId, subForum.subForumId, discussions[35].discussionId, "no content");
                        this.bridge.createNewComment("user2", "pswd2", forum.forumId, subForum.subForumId, discussions[55].discussionId, "no content");
                        this.bridge.createNewComment("user2", "pswd2", forum.forumId, subForum.subForumId, discussions[75].discussionId, "no content");
                    }
                    res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                    AssertTrue(res == 250);

                    testNum++;
                }
                catch { failMsg(testNum); }

                this.bridge.reset();

                /* failure tests */

                // wrong userName
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User user1 = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                    User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");

                    res = this.bridge.getNumOfCommentsSubForum("wrong user", ADMIN_PSWD, forum.forumId, subForum.subForumId);
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                // wrong password
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User user1 = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                    User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");

                    res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, "wrong pass", forum.forumId, subForum.subForumId);
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                // wrong forumId
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User user1 = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                    User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");

                    res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, -2, subForum.subForumId);
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                // wrong subForumId
                try
                {
                    this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                    Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", ADMIN_NAME, ADMIN_PSWD, Forum.RegPolicy.NONE);
                    this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                    SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                    User user1 = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                    User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");

                    res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, -5);
                    failMsg(testNum);
                }
                catch { testNum++; }

                this.bridge.reset();

                return testNum;
            }
        }
        /* Large Scalabiliy - lots of comments and discussions */
        private int LargeScalability()
        {
            int testNum = 0;

            /* testGetNumOfCommentsSubForum */
            try
            {
                int res;

                const int DISCUSSIONS_NUMBER = 100;
                const int COMMENTS_NUMBER = 20;
                this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", "mngr", "mngrPswd", Forum.RegPolicy.NONE);
                this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                User user1 = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");

                res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(res == 0);

                user1 = this.bridge.login(forum.forumId, "user1", "pswd1");
                user2 = this.bridge.login(forum.forumId, "user2", "pswd2");
                Discussion[] discussions = new Discussion[DISCUSSIONS_NUMBER];
                for (int i = 0; i < DISCUSSIONS_NUMBER; i++)
                    discussions[i] = this.bridge.createNewDiscussion("user1", "pswd1", forum.forumId, subForum.subForumId, "discussion" + i, "no content");
                res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(res == DISCUSSIONS_NUMBER);

                for (int i = 1; i <= COMMENTS_NUMBER; i++)
                {
                    this.bridge.createNewComment("user1", "pswd1", forum.forumId, subForum.subForumId, discussions[35].discussionId, "no content");
                    this.bridge.createNewComment("user2", "pswd2", forum.forumId, subForum.subForumId, discussions[55].discussionId, "no content");
                    this.bridge.createNewComment("user2", "pswd2", forum.forumId, subForum.subForumId, discussions[75].discussionId, "no content");
                }
                res = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(res == COMMENTS_NUMBER * 3 + DISCUSSIONS_NUMBER);

                testNum++;
            }
            catch { failMsg(testNum++); }

            this.bridge.reset();

            ///* getNumOfCommentsSingleUser */
            try
            {
                int res;

                const int DISCUSSIONS_NUMBER = 10;
                const int COMMENTS_NUMBER = 25;
                this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", "mngr", "mngrPswd", Forum.RegPolicy.NONE);
                this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                User user1 = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");

                res = this.bridge.getNumOfCommentsSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, user1.userName);
                AssertTrue(res == 0);

                user1 = this.bridge.login(forum.forumId, "user1", "pswd1");
                user2 = this.bridge.login(forum.forumId, "user2", "pswd2");
                Discussion[] discussions1 = new Discussion[DISCUSSIONS_NUMBER];
                Discussion[] discussions2 = new Discussion[DISCUSSIONS_NUMBER];
                for (int i = 0; i < DISCUSSIONS_NUMBER; i++)
                {
                    discussions1[i] = this.bridge.createNewDiscussion(user1.userName, user1.password, forum.forumId, subForum.subForumId, "discussion" + i, "no content");
                    discussions2[i] = this.bridge.createNewDiscussion(user2.userName, user2.password, forum.forumId, subForum.subForumId, "discussion" + i, "no content");
                }
                res = this.bridge.getNumOfCommentsSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, user1.userName);
                AssertTrue(res == DISCUSSIONS_NUMBER);
                res = this.bridge.getNumOfCommentsSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, user2.userName);
                AssertTrue(res == DISCUSSIONS_NUMBER);

                for (int i = 1; i <= COMMENTS_NUMBER; i++)
                {
                    this.bridge.createNewComment(user1.userName, user1.password, forum.forumId, subForum.subForumId, discussions1[DISCUSSIONS_NUMBER- 3].discussionId, "no content");
                    this.bridge.createNewComment(user2.userName, user2.password, forum.forumId, subForum.subForumId, discussions2[DISCUSSIONS_NUMBER - 5].discussionId, "no content");
                    this.bridge.createNewComment(user2.userName, user2.password, forum.forumId, subForum.subForumId, discussions2[DISCUSSIONS_NUMBER - 9].discussionId, "no content");
                }
                res = this.bridge.getNumOfCommentsSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, user1.userName);
                AssertTrue(res == DISCUSSIONS_NUMBER + COMMENTS_NUMBER);
                res = this.bridge.getNumOfCommentsSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, user2.userName);
                AssertTrue(res == DISCUSSIONS_NUMBER + 2 * COMMENTS_NUMBER);

                testNum++;
            }
            catch { failMsg(testNum++); }

            this.bridge.reset();

            ///* getResponsersForSingleUser */
            try
            {
                List<User> res;

                const int USERS_NUMBER = 10;
                const int DISCUSSSION_NEMBER = 25;
                this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", "mngr", "mngrPswd", Forum.RegPolicy.NONE);
                this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                User[] users = new User[USERS_NUMBER];
                for (int i = 0; i < USERS_NUMBER; i++)
                    users[i] = this.bridge.register(forum.forumId, "user" + i, "pswd" + i, "", "");

                res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, users[5].userName);
                AssertTrue(res.Count == 0);

                for (int i = 0; i < USERS_NUMBER; i++)
                    this.bridge.login(forum.forumId, users[i].userName, users[i].password);
                Discussion[] discussions = new Discussion[DISCUSSSION_NEMBER];
                for (int i = 0; i < DISCUSSSION_NEMBER; i++)
                    discussions[i] = this.bridge.createNewDiscussion(users[i % USERS_NUMBER].userName, users[i % USERS_NUMBER].password, forum.forumId, subForum.subForumId, "discussion" + i, "no content");
                res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, users[5].userName);
                AssertTrue(res.Count == 0);

                for (int i = 0; i < USERS_NUMBER; i++)
                    this.bridge.createNewComment(users[i].userName, users[i].password, forum.forumId, subForum.subForumId, discussions[0].discussionId, "no content");

                res = this.bridge.getResponsersForSingleUser(ADMIN_NAME, ADMIN_PSWD, forum.forumId, users[0].userName);
                AssertTrue(res.Count == USERS_NUMBER - 1); //  (USERS_NUMBER - 1) - because it doesn't include user[0] (publisher)

                testNum++;
            }
            catch { failMsg(testNum++); }

            this.bridge.reset();

            return testNum;
        }
        internal Discussion createNewDiscussion(string title, string content, User user, ForumGeneratorContext db, HashSet<string> stopWords)
        {
            List<string> keyWords = parseKeyWords(content, stopWords);
            if (keyWords != null && keyWords.Count > 0)
            {
                if (isClassifies())
                {
                    checkRelevantContent(keyWords);
                }
                else
                    this.vocabulary = TextClassifier.addToVocabulary(keyWords, this.vocabulary);
            }

            Discussion newDiscussion = new Discussion(title, content, user, this);
            this.discussions.Add(newDiscussion);
            db.Discussions.Add(newDiscussion);
            db.SaveChanges();

            return newDiscussion;
        }
        private void scenario2()
        {
            /* Initialization of uniqe string names*/

            string SUB_FORUM1 = "subForum" + random.Next(min, max);
            string USER_1 = "user" + random.Next(min, max);
            string PASSWORD_1 = "pswd" + random.Next(min, max);
            string DISCUSSION_1 = "discussion" + random.Next(min, max);
            string NO_CONTENT = "no content";

            // num = 2;//random.Next(min, max);
            string USER_2 = "user" + random.Next(min, max);
            string PASSWORD_2 = "pswd" + random.Next(min, max);

            try
            {
                //   Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, FORUM_NAME1, ADMIN_NAME, ADMIN_PSWD,Forum.RegPolicy.NONE);
                this.bridge.login(Unitedforum.forumId, ADMIN_NAME, ADMIN_PSWD);
                SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, SUB_FORUM1);
                User user = this.bridge.register(Unitedforum.forumId, USER_1, PASSWORD_1, "", "");
                Discussion d = this.bridge.createNewDiscussion(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, subForum.subForumId, DISCUSSION_1, NO_CONTENT);

                this.bridge.login(Unitedforum.forumId, USER_1, PASSWORD_1);
                for (int i = 1; i <= 10; i++)
                {
                    this.bridge.createNewComment(USER_1, PASSWORD_1, Unitedforum.forumId, subForum.subForumId, d.discussionId, NO_CONTENT);
                }
                Boolean logoutAns = this.bridge.logout(Unitedforum.forumId, user.userName, user.password);
                AssertFalse(user.isLoggedIn);
                AssertTrue(logoutAns);

                int num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, subForum.subForumId);

                this.bridge.login(Unitedforum.forumId, ADMIN_NAME, ADMIN_PSWD);
                User user2 = this.bridge.register(Unitedforum.forumId, USER_2, PASSWORD_2, "", "");
                user2 = this.bridge.login(Unitedforum.forumId, USER_2, PASSWORD_2);

                for (int i = 1; i <= 10; i++)
                {
                    this.bridge.createNewComment(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, subForum.subForumId, d.discussionId, NO_CONTENT);
                }
                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, subForum.subForumId);

                d = this.bridge.editDiscussion(Unitedforum.forumId, subForum.subForumId, d.discussionId, ADMIN_NAME, ADMIN_PSWD, "brand new content");
                AssertEquals(d.content, "brand new content");

                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, subForum.subForumId);

                Discussion[] discussions = new Discussion[100];
                for (int i = 1; i <= 10; i++)
                    discussions[i] = this.bridge.createNewDiscussion(USER_2, PASSWORD_2, Unitedforum.forumId, subForum.subForumId, "discussion" + i, NO_CONTENT);
                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, subForum.subForumId);

                for (int i = 1; i <= 10; i++)
                    d = this.bridge.editDiscussion(Unitedforum.forumId, subForum.subForumId, discussions[i].discussionId, USER_2, PASSWORD_2, "brand new content" + i);
                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, Unitedforum.forumId, subForum.subForumId);

                Console.WriteLine("finished scenario2 \n");

            }
            catch
            {
                failMsg(testNum);
                failed2 = true;
            }

            //this.bridge.reset();
        }
        private int advancedTest1()
        {
            int testNum = 1;
            try
            {
                this.bridge.superUserLogin(SU_NAME, SU_PSWD);
                Forum forum = this.bridge.createNewForum(SU_NAME, SU_PSWD, "forum1", "mngr", "mngrPswd", Forum.RegPolicy.NONE);
                this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                SubForum subForum = this.bridge.createNewSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, "subForum1");
                User user = this.bridge.register(forum.forumId, "user1", "pswd1", "", "");
                Discussion d = this.bridge.createNewDiscussion(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId, "discussion1", "no content");
                this.bridge.login(forum.forumId, "user1", "pswd1");

                for (int i = 1; i <= 10; i++)
                {
                    this.bridge.createNewComment("user1", "pswd1", forum.forumId, subForum.subForumId, d.discussionId, "no content");
                }
                Boolean logoutAns = this.bridge.logout(forum.forumId, user.userName, user.password);
                AssertFalse(user.isLoggedIn);
                AssertTrue(logoutAns);

                int num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(num_of_comments == 11);

                this.bridge.login(forum.forumId, ADMIN_NAME, ADMIN_PSWD);
                User user2 = this.bridge.register(forum.forumId, "user2", "pswd2", "", "");
                user2 = this.bridge.login(forum.forumId, "user2", "pswd2");

                for (int i = 1; i <= 100; i++)
                {
                    this.bridge.createNewComment(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId, d.discussionId, "no content");
                }
                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(num_of_comments == 111);

                d = this.bridge.editDiscussion(forum.forumId, subForum.subForumId, d.discussionId, ADMIN_NAME, ADMIN_PSWD, "brand new content");
                AssertEquals(d.content, "brand new content");

                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(num_of_comments == 111);

                Discussion[] discussions = new Discussion[100];
                for (int i = 0; i <= 99; i++)
                    discussions[i] = this.bridge.createNewDiscussion("user2", "pswd2", forum.forumId, subForum.subForumId, "discussion" + i, "no content");
                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(num_of_comments == 211);

                for (int i = 1; i <= 10; i++)
                    d = this.bridge.editDiscussion(forum.forumId, subForum.subForumId, discussions[i].discussionId, "user2", "pswd2", "brand new content" + i);
                num_of_comments = this.bridge.getNumOfCommentsSubForum(ADMIN_NAME, ADMIN_PSWD, forum.forumId, subForum.subForumId);
                AssertTrue(num_of_comments == 211);

            }
            catch { failMsg(testNum++); }

            this.bridge.reset();
            return testNum++;
        }