예제 #1
0
        public void LookingForTagAmongTagsWithDifferentPopularity_GetSortedResultList()
        {
            //Arrange
            var tagRepository = new InMemoryTagRepository();

            tagRepository.Add("Tag1");
            tagRepository.Add("Tag2");
            tagRepository.Add("Tag3");
            var tagFacade = new TagFacade(tagRepository);

            tagFacade.UseTag("Tag1");

            tagFacade.UseTag("Tag2");
            tagFacade.UseTag("Tag2");
            tagFacade.UseTag("Tag2");

            tagFacade.UseTag("Tag3");
            tagFacade.UseTag("Tag3");

            //Act
            var expectedTags = new List <string> {
                "Tag2", "Tag3", "Tag1"
            };
            var actualTags = tagFacade.FindTag("Tag").ToList();

            //Assert
            Assert.AreEqual(expectedTags[0], actualTags[0]);
            Assert.AreEqual(expectedTags[1], actualTags[1]);
            Assert.AreEqual(expectedTags[2], actualTags[2]);
            Assert.AreEqual(expectedTags.Count, actualTags.Count);
        }
예제 #2
0
        public void UseNewTag_GetAddedNewTag()
        {
            //Arrange
            var tagRepository = new InMemoryTagRepository();
            var tagFacade     = new TagFacade(tagRepository);

            //Act
            tagFacade.UseTag("Tag");

            //Assert
            Assert.AreEqual(1, tagFacade.FindTag("Tag").Count());
        }
예제 #3
0
        public void CanAddTag()
        {
            var repo = new InMemoryTagRepository();
            Tag tag  = new Tag();

            tag.TagName = "Test Test";

            repo.Add(tag);

            var list   = repo.GetAll();
            var newTag = repo.Get(5);

            Assert.AreEqual(list.Count, 5);
            Assert.AreEqual(newTag.TagName, "Test Test");
        }
예제 #4
0
        public void TryToFindNotExistingTags_GetEmptyList()
        {
            //Arrange
            var tagRepository = new InMemoryTagRepository();

            tagRepository.Add("Tag1");
            tagRepository.Add("Tag2");
            tagRepository.Add("Teg3");
            var tagFacade = new TagFacade(tagRepository);

            //Act
            var actualTags = tagFacade.FindTag("Teg1").ToList();

            //Assert
            Assert.AreEqual(0, actualTags.Count);
        }
예제 #5
0
        public void TryToFindExistingTags_GetListOfFoundTags()
        {
            //Arrange
            var tagRepository = new InMemoryTagRepository();

            tagRepository.Add("Tag1");
            tagRepository.Add("Tag2");
            tagRepository.Add("Teg3");
            var tagFacade = new TagFacade(tagRepository);

            //Act
            var expectedTags = new List <string> {
                "Tag1", "Tag2"
            };
            var actualTags = tagFacade.FindTag("Tag").ToList();

            //Assert
            Assert.AreEqual(expectedTags[0], actualTags[0]);
            Assert.AreEqual(expectedTags[1], actualTags[1]);
            Assert.AreEqual(expectedTags.Count, actualTags.Count);
        }
예제 #6
0
        public void UseExistingTag_GetUpdatedPopularity()
        {
            //Arrange
            var tagRepository = new InMemoryTagRepository();

            tagRepository.Add("Tag1");
            tagRepository.Add("Tag2");
            var tagFacade = new TagFacade(tagRepository);

            //Act
            tagFacade.UseTag("Tag2");

            //Assert
            var expectedTags = new List <string> {
                "Tag2", "Tag1"
            };
            var actualTags = tagFacade.FindTag("Tag").ToList();

            Assert.AreEqual(expectedTags[0], actualTags[0]);
            Assert.AreEqual(expectedTags[1], actualTags[1]);
            Assert.AreEqual(expectedTags.Count, actualTags.Count);
        }
예제 #7
0
        protected override void Seed(VideoGameBlog.Data.EntityFramework.InitDbContext context)
        {
            var userMgr = new UserManager <BlogUser>(new UserStore <BlogUser>(context));
            var roleMgr = new RoleManager <BlogRole>(new RoleStore <BlogRole>(context));

            if (!roleMgr.RoleExists("Admin"))
            {
                roleMgr.Create(new BlogRole()
                {
                    Name = "Admin"
                });
            }
            if (!roleMgr.RoleExists("Marketing"))
            {
                roleMgr.Create(new BlogRole()
                {
                    Name = "Marketing"
                });
            }
            if (!roleMgr.RoleExists("Disabled"))
            {
                roleMgr.Create(new BlogRole()
                {
                    Name = "Disabled"
                });
            }

            // create the default user
            var admin = new BlogUser()
            {
                UserName    = "******",
                Email       = "*****@*****.**",
                PhoneNumber = "1111111111"
            };
            var marketing = new BlogUser()
            {
                UserName    = "******",
                Email       = "*****@*****.**",
                PhoneNumber = "2222222222"
            };
            var disabled = new BlogUser()
            {
                UserName    = "******",
                Email       = "*****@*****.**",
                PhoneNumber = "3333333333"
            };

            // create the user with the manager class
            if (userMgr.FindByName(admin.UserName) == null)
            {
                userMgr.Create(admin, "corndog123");
            }
            if (userMgr.FindByName(marketing.UserName) == null)
            {
                userMgr.Create(marketing, "corndog123");
            }
            if (userMgr.FindByName(disabled.UserName) == null)
            {
                userMgr.Create(disabled, "corndog123");
            }

            // add the user to the admin role
            userMgr.AddToRole(admin.Id, "Admin");
            userMgr.AddToRole(marketing.Id, "Marketing");
            userMgr.AddToRole(disabled.Id, "Disabled");

            InMemoryCategoryRepository catRepo = new InMemoryCategoryRepository();

            foreach (var c in catRepo.GetAll())
            {
                context.Categories.AddOrUpdate(c);
                context.SaveChanges();
            }

            InMemoryTagRepository tagRepo = new InMemoryTagRepository();

            foreach (var t in tagRepo.GetAll())
            {
                context.Tags.AddOrUpdate(t);
                context.SaveChanges();
            }

            InMemoryStaticPageRepository statRepo = new InMemoryStaticPageRepository();

            foreach (var s in statRepo.GetAll())
            {
                context.StaticPages.AddOrUpdate(s);
                context.SaveChanges();
            }

            InMemoryPostRepository postRepo = new InMemoryPostRepository();

            foreach (var p in postRepo.GetAll())
            {
                context.Posts.AddOrUpdate(p);
                context.SaveChanges();
            }
        }
예제 #8
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            StartLoggly();

            services.AddWebSocketManager();

            IFileRepository     fileRepository;
            IGroupRepository    groupRepository;
            IKeysRepository     keysRepository;
            ITagRepository      tagRepository;
            IUserRepository     userRepository;
            ISanctionRepository sanctionRepository;
            IEventRepository    eventRepository;

            if (bool.Parse(Configuration.GetValue <string>("UseDB")))
            {
                var dbContext = Configuration.GetValue <string>("MysqlConnectionString");
                using (var context = new EduhubContext(dbContext))
                {
                    if (bool.Parse(Configuration.GetValue <string>("DeleteDB")))
                    {
                        context.Database.EnsureDeleted();
                    }
                    if (context.Database.EnsureCreated())
                    {
                        var dbName = dbContext.Split("database=")[1].Split(";")[0];
                        context.Database.ExecuteSqlCommand(
                            "ALTER DATABASE " + dbName + " CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;");
                        var modelNames = context.Model.GetEntityTypes();
                        foreach (var modelname in modelNames)
                        {
                            var mapping   = context.Model.FindEntityType(modelname.Name).Relational();
                            var tableName = mapping.TableName;
                            context.Database.ExecuteSqlCommand(
                                "alter table " + tableName.ToLower()
                                + " convert to character set utf8mb4 collate utf8mb4_bin;");
                        }
                    }

                    context.Database.Migrate();
                }

                fileRepository     = new InMysqlFileRepository(dbContext);
                groupRepository    = new InMysqlGroupRepository(dbContext);
                keysRepository     = new InMysqlKeyRepository(dbContext);
                tagRepository      = new InMysqlTagRepository(dbContext);
                userRepository     = new InMysqlUserRepository(dbContext);
                sanctionRepository = new InMysqlSanctionRepository(dbContext);
                eventRepository    = new InMemoryEventRepository();
            }
            else
            {
                fileRepository     = new InMemoryFileRepository();
                groupRepository    = new InMemoryGroupRepository();
                keysRepository     = new InMemoryKeysRepository();
                tagRepository      = new InMemoryTagRepository();
                sanctionRepository = new InMemorySanctionRepository();
                userRepository     = new InMemoryUserRepository();
                eventRepository    = new InMemoryEventRepository();
            }

            var emailSettings = new EmailSettings(Configuration.GetValue <string>("EmailLogin"),
                                                  Configuration.GetValue <string>("Email"),
                                                  Configuration.GetValue <string>("EmailPassword"),
                                                  Configuration.GetValue <string>("SmtpAddress"),
                                                  Configuration.GetValue <string>("ConfirmAddress"),
                                                  int.Parse(Configuration.GetValue <string>("SmtpPort")));


            var defaultAvatarFilename    = Configuration.GetValue <string>("DefaultAvatarFilename");
            var defaultAvatarContentType = Configuration.GetValue <string>("DefaultAvatarContentType");
            var userSettings             = new UserSettings(defaultAvatarFilename);

            if (!fileRepository.DoesFileExists(defaultAvatarFilename))
            {
                fileRepository.AddFile(new UserFile(defaultAvatarFilename, defaultAvatarContentType));
            }

            var tagFacade   = new TagFacade(tagRepository);
            var emailSender = new EmailSender(emailSettings);
            var notificationsDistributor = new NotificationsDistributor(groupRepository, userRepository, emailSender);

            var groupSettings = new GroupSettings(Configuration.GetValue <int>("MinGroupSize"),
                                                  Configuration.GetValue <int>("MaxGroupSize"),
                                                  Configuration.GetValue <double>("MinGroupValue"),
                                                  Configuration.GetValue <double>("MaxGroupValue"));

            var eventBusSettings = new EventBusSettings(Configuration.GetValue <string>("RabbitMqServerHostName"),
                                                        Configuration.GetValue <string>("RabbitMqServerVirtualHost"),
                                                        Configuration.GetValue <string>("RabbitMqAdminUserName"),
                                                        Configuration.GetValue <string>("RabbitMqAdminPassword"));
            var eventBus = new EventBus(eventBusSettings);

            eventBus.StartListening();

            var adminsEventConsumer     = new AdminsEventConsumer(notificationsDistributor, eventRepository);
            var courseEventConsumer     = new CourseEventConsumer(notificationsDistributor, eventRepository);
            var curriculumEventConsumer = new CurriculumEventConsumer(notificationsDistributor, eventRepository);
            var groupEventsConsumer     = new GroupEventsConsumer(notificationsDistributor, eventRepository);
            var invitationConsumer      = new InvitationConsumer(notificationsDistributor, eventRepository);
            var memberActionsConsumer   = new MemberActionsConsumer(notificationsDistributor, eventRepository);

            eventBus.RegisterConsumer(new TagPopularityConsumer(tagFacade));
            eventBus.RegisterConsumer <ReportMessageEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <SanctionsAppliedEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <SanctionCancelledEvent>(adminsEventConsumer);
            eventBus.RegisterConsumer <TeacherFoundEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <CourseFinishedEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <ReviewReceivedEvent>(courseEventConsumer);
            eventBus.RegisterConsumer <CurriculumAcceptedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <CurriculumDeclinedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <CurriculumSuggestedEvent>(curriculumEventConsumer);
            eventBus.RegisterConsumer <NewCreatorEvent>(groupEventsConsumer);
            eventBus.RegisterConsumer <GroupIsFormedEvent>(groupEventsConsumer);
            eventBus.RegisterConsumer <InvitationAcceptedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <InvitationDeclinedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <InvitationReceivedEvent>(invitationConsumer);
            eventBus.RegisterConsumer <NewMemberEvent>(memberActionsConsumer);
            eventBus.RegisterConsumer <MemberLeftEvent>(memberActionsConsumer);

            var publisher = eventBus.GetEventPublisher();

            var userFacade      = new UserFacade(userRepository, groupRepository, eventRepository, publisher);
            var groupEditFacade = new GroupEditFacade(groupRepository, groupSettings, publisher);
            var userEditFacade  = new UserEditFacade(userRepository, fileRepository, sanctionRepository);
            var groupFacade     = new GroupFacade(groupRepository, userRepository, sanctionRepository, groupSettings,
                                                  publisher);
            var fileFacade        = new FileFacade(fileRepository);
            var chatFacade        = new ChatFacade(groupRepository, userRepository);
            var sanctionsFacade   = new SanctionFacade(sanctionRepository, userRepository, publisher);
            var userAccountFacade = new AccountFacade(keysRepository, userRepository, emailSender, userSettings);
            var reportFacade      = new ReportFacade(userRepository, eventRepository, publisher);

            services.AddSingleton <IUserFacade>(userFacade);
            services.AddSingleton <IGroupFacade>(groupFacade);
            services.AddSingleton <IFileFacade>(fileFacade);
            services.AddSingleton <IChatFacade>(chatFacade);
            services.AddSingleton <IGroupEditFacade>(groupEditFacade);
            services.AddSingleton <IUserEditFacade>(userEditFacade);
            services.AddSingleton <ITagFacade>(tagFacade);
            services.AddSingleton <ISanctionFacade>(sanctionsFacade);
            services.AddSingleton <IAccountFacade>(userAccountFacade);
            services.AddSingleton <IReportFacade>(reportFacade);
            services.AddSingleton(Env);

            userAccountFacade.CheckAdminExistence(Configuration.GetValue <string>("AdminEmail"));

            services.AddSwaggerGen(current =>
            {
                current.SwaggerDoc("v1", new Info
                {
                    Title   = "EduHub API",
                    Version = "v1"
                });
                current.AddSecurityDefinition("Bearer", new ApiKeyScheme
                {
                    Description =
                        "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name = "Authorization",
                    In   = "header",
                    Type = "apiKey"
                });
                current.OperationFilter <ExamplesOperationFilter>();
                current.DescribeAllEnumsAsStrings();
                var a = string.Format(@"{0}\EduHub.xml", AppDomain.CurrentDomain.BaseDirectory);
                current.IncludeXmlComments(string.Format(@"{0}/EduHub.xml", AppDomain.CurrentDomain.BaseDirectory));
            });
            ConfigureSecurity(services);
            if (Configuration.GetValue <bool>("Authorization"))
            {
                services.AddMvc(o =>
                {
                    o.Filters.Add(new ExceptionFilter());
                    o.Filters.Add(new ActionFilter());
                });
            }
            else
            {
                services.AddMvc(o =>
                {
                    o.Filters.Add(new AllowAnonymousFilter());
                    o.Filters.Add(new ExceptionFilter());
                    o.Filters.Add(new ActionFilter());
                });
            }
            services.AddCors(options =>
            {
                options.AddPolicy("AllowAnyOrigin",
                                  builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
        }