public OrganizationRepositoryTests(ITestOutputHelper output, AppWebHostFactory factory) : base(output, factory)
 {
     Log.SetLogLevel <OrganizationRepository>(LogLevel.Trace);
     _cache      = GetService <ICacheClient>() as InMemoryCacheClient;
     _repository = GetService <IOrganizationRepository>();
     _plans      = GetService <BillingPlans>();
 }
Exemplo n.º 2
0
        public static bool IsOverHourlyLimit(this Organization organization, BillingPlans plans)
        {
            var date      = SystemClock.UtcNow.Floor(TimeSpan.FromHours(1));
            var usageInfo = organization.OverageHours.FirstOrDefault(o => o.Date == date);

            return(usageInfo != null && usageInfo.Total > organization.GetHourlyEventLimit(plans));
        }
 public OrganizationController(
     IOrganizationRepository organizationRepository,
     ICacheClient cacheClient,
     IEventRepository eventRepository,
     IUserRepository userRepository,
     IProjectRepository projectRepository,
     IQueue <WorkItemData> workItemQueue,
     BillingManager billingManager,
     IMailer mailer,
     IMessagePublisher messagePublisher,
     IMapper mapper,
     IQueryValidator validator,
     IOptions <AppOptions> options,
     IOptions <StripeOptions> stripeOptions,
     ILoggerFactory loggerFactory,
     BillingPlans plans) : base(organizationRepository, mapper, validator, loggerFactory)
 {
     _cacheClient       = cacheClient;
     _eventRepository   = eventRepository;
     _userRepository    = userRepository;
     _projectRepository = projectRepository;
     _workItemQueue     = workItemQueue;
     _billingManager    = billingManager;
     _mailer            = mailer;
     _messagePublisher  = messagePublisher;
     _options           = options;
     _stripeOptions     = stripeOptions;
     _plans             = plans;
 }
Exemplo n.º 4
0
 public OrganizationController(
     OrganizationService organizationService,
     IOrganizationRepository organizationRepository,
     ICacheClient cacheClient,
     IEventRepository eventRepository,
     IUserRepository userRepository,
     IProjectRepository projectRepository,
     BillingManager billingManager,
     IMailer mailer,
     IMessagePublisher messagePublisher,
     IMapper mapper,
     IQueryValidator validator,
     AppOptions options,
     ILoggerFactory loggerFactory,
     BillingPlans plans) : base(organizationRepository, mapper, validator, loggerFactory)
 {
     _organizationService = organizationService;
     _cacheClient         = cacheClient;
     _eventRepository     = eventRepository;
     _userRepository      = userRepository;
     _projectRepository   = projectRepository;
     _billingManager      = billingManager;
     _mailer           = mailer;
     _messagePublisher = messagePublisher;
     _options          = options;
     _plans            = plans;
 }
Exemplo n.º 5
0
        public static int GetHourlyEventLimit(this Organization organization, BillingPlans plans)
        {
            if (organization.MaxEventsPerMonth <= 0)
            {
                return(Int32.MaxValue);
            }

            int eventsLeftInMonth = organization.GetMaxEventsPerMonthWithBonus() - (organization.GetCurrentMonthlyTotal() - organization.GetCurrentMonthlyBlocked());

            if (eventsLeftInMonth < 0)
            {
                return(0);
            }

            if (organization.PlanId == plans.FreePlan.Id)
            {
                return(eventsLeftInMonth);
            }

            var    utcNow           = SystemClock.UtcNow;
            double hoursLeftInMonth = (utcNow.EndOfMonth() - utcNow).TotalHours;

            if (hoursLeftInMonth < 10.0)
            {
                return(eventsLeftInMonth);
            }

            return((int)Math.Ceiling(eventsLeftInMonth / hoursLeftInMonth * 10d));
        }
Exemplo n.º 6
0
 public BillingManager(IOrganizationRepository organizationRepository, IProjectRepository projectRepository, IUserRepository userRepository, BillingPlans plans)
 {
     _organizationRepository = organizationRepository;
     _projectRepository      = projectRepository;
     _userRepository         = userRepository;
     _plans = plans;
 }
Exemplo n.º 7
0
    public static Organization GenerateOrganization(BillingManager billingManager, BillingPlans plans, bool generateId = false, string name = null, string id = null, string inviteEmail = null, bool isSuspended = false)
    {
        var organization = new Organization {
            Id   = id.IsNullOrEmpty() ? generateId ? ObjectId.GenerateNewId().ToString() : TestConstants.OrganizationId : id,
            Name = name ?? $"Organization{id}"
        };

        billingManager.ApplyBillingPlan(organization, plans.UnlimitedPlan);

        if (!String.IsNullOrEmpty(inviteEmail))
        {
            organization.Invites.Add(new Invite {
                EmailAddress = inviteEmail,
                Token        = Guid.NewGuid().ToString()
            });
        }

        if (isSuspended)
        {
            organization.IsSuspended       = true;
            organization.SuspensionCode    = SuspensionCode.Abuse;
            organization.SuspendedByUserId = TestConstants.UserId;
            organization.SuspensionDate    = SystemClock.UtcNow;
        }

        return(organization);
    }
Exemplo n.º 8
0
            public ApiMappings(BillingPlans plans)
            {
                CreateMap <UserDescription, EventUserDescription>();

                CreateMap <NewOrganization, Organization>();
                CreateMap <Organization, ViewOrganization>().AfterMap((o, vo) => {
                    vo.IsOverHourlyLimit  = o.IsOverHourlyLimit(plans);
                    vo.IsOverMonthlyLimit = o.IsOverMonthlyLimit();
                });

                CreateMap <Stripe.Invoice, InvoiceGridModel>().AfterMap((si, igm) => {
                    igm.Id   = igm.Id.Substring(3);
                    igm.Date = si.Created;
                });

                CreateMap <NewProject, Project>();
                CreateMap <Project, ViewProject>().AfterMap((p, vp) => vp.HasSlackIntegration = p.Data.ContainsKey(Project.KnownDataKeys.SlackToken));

                CreateMap <NewToken, Token>().ForMember(m => m.Type, m => m.Ignore());
                CreateMap <Token, ViewToken>();

                CreateMap <User, ViewUser>();

                CreateMap <NewWebHook, WebHook>();
            }
Exemplo n.º 9
0
 public UsageService(IOrganizationRepository organizationRepository, IProjectRepository projectRepository, ICacheClient cache, IMessagePublisher messagePublisher, BillingPlans plans, ILoggerFactory loggerFactory = null) {
     _organizationRepository = organizationRepository;
     _projectRepository = projectRepository;
     _cache = cache;
     _messagePublisher = messagePublisher;
     _plans = plans;
     _logger = loggerFactory.CreateLogger<UsageService>();
 }
 public SampleDataService(IOrganizationRepository organizationRepository, IProjectRepository projectRepository, IUserRepository userRepository, ITokenRepository tokenRepository, BillingManager billingManager, BillingPlans billingPlans)
 {
     _organizationRepository = organizationRepository;
     _projectRepository      = projectRepository;
     _userRepository         = userRepository;
     _tokenRepository        = tokenRepository;
     _billingManager         = billingManager;
     _billingPlans           = billingPlans;
 }
Exemplo n.º 11
0
        public MailerTests(ITestOutputHelper output) : base(output) {
            _mailer = GetService<IMailer>();
            _options = GetService<AppOptions>();
            _billingManager = GetService<BillingManager>();
            _plans = GetService<BillingPlans>();

            if (_mailer is NullMailer)
                _mailer = new Mailer(GetService<IQueue<MailMessage>>(), GetService<FormattingPluginManager>(), _options, GetService<IMetricsClient>(), Log.CreateLogger<Mailer>());
        }
Exemplo n.º 12
0
 public UsageServiceTests(ITestOutputHelper output, AppWebHostFactory factory) : base(output, factory)
 {
     Log.SetLogLevel <OrganizationRepository>(LogLevel.Information);
     _cache                  = GetService <ICacheClient>();
     _usageService           = GetService <UsageService>();
     _organizationRepository = GetService <IOrganizationRepository>();
     _projectRepository      = GetService <IProjectRepository>();
     _plans                  = GetService <BillingPlans>();
 }
Exemplo n.º 13
0
 public CleanupDataJobTests(ITestOutputHelper output, AppWebHostFactory factory) : base(output, factory)
 {
     _job = GetService <CleanupDataJob>();
     _organizationRepository = GetService <IOrganizationRepository>();
     _projectRepository      = GetService <IProjectRepository>();
     _stackRepository        = GetService <IStackRepository>();
     _eventRepository        = GetService <IEventRepository>();
     _billingManager         = GetService <BillingManager>();
     _plans = GetService <BillingPlans>();
 }
Exemplo n.º 14
0
 public AggregationTests(ITestOutputHelper output) : base(output)
 {
     _pipeline               = GetService <EventPipeline>();
     _eventRepository        = GetService <IEventRepository>();
     _stackRepository        = GetService <IStackRepository>();
     _organizationRepository = GetService <IOrganizationRepository>();
     _projectRepository      = GetService <IProjectRepository>();
     _stackService           = GetService <StackService>();
     _billingManager         = GetService <BillingManager>();
     _plans = GetService <BillingPlans>();
 }
Exemplo n.º 15
0
 public CloseInactiveSessionsJobTests(ITestOutputHelper output) : base(output)
 {
     _job   = GetService <CloseInactiveSessionsJob>();
     _cache = GetService <ICacheClient>();
     _organizationRepository = GetService <IOrganizationRepository>();
     _projectRepository      = GetService <IProjectRepository>();
     _eventRepository        = GetService <IEventRepository>();
     _userRepository         = GetService <IUserRepository>();
     _pipeline       = GetService <EventPipeline>();
     _billingManager = GetService <BillingManager>();
     _plans          = GetService <BillingPlans>();
 }
Exemplo n.º 16
0
 public DailySummaryJob(EmailOptions emailOptions, IProjectRepository projectRepository, IOrganizationRepository organizationRepository, IUserRepository userRepository, IStackRepository stackRepository, IEventRepository eventRepository, IMailer mailer, ICacheClient cacheClient, BillingPlans plans, ILoggerFactory loggerFactory = null) : base(loggerFactory)
 {
     _emailOptions           = emailOptions;
     _projectRepository      = projectRepository;
     _organizationRepository = organizationRepository;
     _userRepository         = userRepository;
     _stackRepository        = stackRepository;
     _eventRepository        = eventRepository;
     _mailer       = mailer;
     _plans        = plans;
     _lockProvider = new ThrottlingLockProvider(cacheClient, 1, TimeSpan.FromHours(1));
 }
Exemplo n.º 17
0
 public EventPostJobTests(ITestOutputHelper output, AppWebHostFactory factory) : base(output, factory)
 {
     _job                    = GetService <EventPostsJob>();
     _eventQueue             = GetService <IQueue <EventPost> >();
     _storage                = GetService <IFileStorage>();
     _eventPostService       = new EventPostService(_eventQueue, _storage, Log);
     _organizationRepository = GetService <IOrganizationRepository>();
     _projectRepository      = GetService <IProjectRepository>();
     _eventRepository        = GetService <IEventRepository>();
     _userRepository         = GetService <IUserRepository>();
     _jsonSerializerSettings = GetService <JsonSerializerSettings>();
     _billingManager         = GetService <BillingManager>();
     _plans                  = GetService <BillingPlans>();
     _options                = GetService <IOptions <AppOptions> >();
 }
Exemplo n.º 18
0
        public EventPostJobTests(ITestOutputHelper output) : base(output)
        {
            _job                    = GetService <EventPostsJob>();
            _queue                  = GetService <IQueue <EventPost> >();
            _storage                = GetService <IFileStorage>();
            _eventPostService       = new EventPostService(_queue, _storage, Log);
            _organizationRepository = GetService <IOrganizationRepository>();
            _projectRepository      = GetService <IProjectRepository>();
            _eventRepository        = GetService <IEventRepository>();
            _userRepository         = GetService <IUserRepository>();
            _jsonSerializerSettings = GetService <JsonSerializerSettings>();
            _billingManager         = GetService <BillingManager>();
            _plans                  = GetService <BillingPlans>();
            _options                = GetService <IOptions <AppOptions> >();

            CreateDataAsync().GetAwaiter().GetResult();
        }
Exemplo n.º 19
0
 public SampleDataService(
     IOrganizationRepository organizationRepository,
     IProjectRepository projectRepository,
     IUserRepository userRepository,
     ITokenRepository tokenRepository,
     BillingManager billingManager,
     BillingPlans billingPlans,
     ILoggerFactory loggerFactory
     )
 {
     _organizationRepository = organizationRepository;
     _projectRepository      = projectRepository;
     _userRepository         = userRepository;
     _tokenRepository        = tokenRepository;
     _billingManager         = billingManager;
     _billingPlans           = billingPlans;
     _logger = loggerFactory.CreateLogger <SampleDataService>();
 }
Exemplo n.º 20
0
 public AdminController(
     ExceptionlessElasticConfiguration configuration,
     IFileStorage fileStorage,
     IMessagePublisher messagePublisher,
     IOrganizationRepository organizationRepository,
     IQueue <EventPost> eventPostQueue,
     IQueue <WorkItemData> workItemQueue,
     IOptions <AppOptions> appOptions,
     IOptions <AuthOptions> authOptions,
     IOptions <CacheOptions> cacheOptions,
     IOptions <ElasticsearchOptions> elasticsearchOptions,
     IOptions <EmailOptions> emailOptions,
     IOptions <IntercomOptions> intercomOptions,
     IOptions <MessageBusOptions> messageBusOptions,
     IOptions <MetricOptions> metricOptions,
     IOptions <QueueOptions> queueOptions,
     IOptions <SlackOptions> slackOptions,
     IOptions <StorageOptions> storageOptions,
     IOptions <StripeOptions> stripeOptions,
     BillingManager billingManager,
     BillingPlans plans)
 {
     _configuration          = configuration;
     _fileStorage            = fileStorage;
     _messagePublisher       = messagePublisher;
     _organizationRepository = organizationRepository;
     _eventPostQueue         = eventPostQueue;
     _workItemQueue          = workItemQueue;
     _appOptions             = appOptions;
     _authOptions            = authOptions;
     _cacheOptions           = cacheOptions;
     _elasticsearchOptions   = elasticsearchOptions;
     _emailOptions           = emailOptions;
     _intercomOptions        = intercomOptions;
     _messageBusOptions      = messageBusOptions;
     _metricOptions          = metricOptions;
     _queueOptions           = queueOptions;
     _slackOptions           = slackOptions;
     _storageOptions         = storageOptions;
     _stripeOptions          = stripeOptions;
     _billingManager         = billingManager;
     _plans = plans;
 }
        public OrganizationValidator(BillingPlans plans)
        {
            RuleFor(o => o.Name).NotEmpty().WithMessage("Please specify a valid name.");
            RuleFor(o => o.PlanId).NotEmpty().WithMessage("Please specify a valid plan id.");
            RuleFor(o => o.HasPremiumFeatures).Equal(false).When(o => o.PlanId == plans.FreePlan.Id).WithMessage("Premium features cannot be enabled on the free plan.");

            RuleFor(o => o.StripeCustomerId).NotEmpty().When(o => o.BillingPrice > 0).WithMessage("The stripe customer should be set on paid plans.");
            RuleFor(o => o.CardLast4).NotEmpty().When(o => o.BillingPrice > 0).WithMessage("The card last four should be set on paid plans.");
            RuleFor(o => o.SubscribeDate).NotEmpty().When(o => o.BillingPrice > 0).WithMessage("The subscribe date should be set on paid plans.");
            RuleFor(o => o.BillingChangeDate).NotEmpty().When(o => o.BillingPrice > 0).WithMessage("The billing change date should be set on paid plans.");
            RuleFor(o => o.BillingChangedByUserId).IsObjectId().When(o => o.BillingPrice > 0).WithMessage("The billing changed by user id should be set on paid plans.");

            RuleFor(o => o.SuspensionCode).NotEmpty().When(o => o.IsSuspended).WithMessage("Please specify a valid suspension code.");
            RuleFor(o => o.SuspensionCode).Equal((SuspensionCode?)null).Unless(o => o.IsSuspended).WithMessage("The suspension code cannot be set while an organization is not suspended.");
            RuleFor(o => o.SuspensionDate).NotEmpty().When(o => o.IsSuspended).WithMessage("Please specify a valid suspension date.");
            RuleFor(o => o.SuspensionDate).Equal((DateTime?)null).Unless(o => o.IsSuspended).WithMessage("The suspension date cannot be set while an organization is not suspended.");
            RuleFor(o => o.SuspendedByUserId).NotEmpty().When(o => o.IsSuspended).WithMessage("Please specify a user id of user that suspended this organization.");
            RuleFor(o => o.SuspendedByUserId).Equal((string)null).Unless(o => o.IsSuspended).WithMessage("The suspended by user id cannot be set while an organization is not suspended.");
            RuleFor(o => o.SuspensionNotes).NotEmpty().When(o => o.IsSuspended && o.SuspensionCode.HasValue && o.SuspensionCode == SuspensionCode.Other).WithMessage("Please specify a suspension note.");
        }
Exemplo n.º 22
0
 public AdminController(
     ExceptionlessElasticConfiguration configuration,
     IFileStorage fileStorage,
     IMessagePublisher messagePublisher,
     IOrganizationRepository organizationRepository,
     IQueue <EventPost> eventPostQueue,
     IQueue <WorkItemData> workItemQueue,
     AppOptions appOptions,
     BillingManager billingManager,
     BillingPlans plans)
 {
     _configuration          = configuration;
     _fileStorage            = fileStorage;
     _messagePublisher       = messagePublisher;
     _organizationRepository = organizationRepository;
     _eventPostQueue         = eventPostQueue;
     _workItemQueue          = workItemQueue;
     _appOptions             = appOptions;
     _billingManager         = billingManager;
     _plans = plans;
 }
Exemplo n.º 23
0
 public static Organization GenerateSampleOrganization(BillingManager billingManager, BillingPlans plans)
 {
     return(GenerateOrganization(billingManager, plans, id: TestConstants.OrganizationId, name: "Acme", inviteEmail: TestConstants.InvitedOrganizationUserEmail));
 }
 public IncrementCountersAction(IMetricsClient metricsClient, BillingPlans plans, IOptions <AppOptions> options, ILoggerFactory loggerFactory = null) : base(options, loggerFactory)
 {
     _metricsClient  = metricsClient;
     _plans          = plans;
     ContinueOnError = true;
 }
Exemplo n.º 25
0
 public GeoTests(ITestOutputHelper output) : base(output)
 {
     _billingManager = GetService <BillingManager>();
     _plans          = GetService <BillingPlans>();
     _options        = GetService <AppOptions>();
 }
Exemplo n.º 26
0
        public static void SetHourlyOverage(this Organization organization, double total, double blocked, double tooBig, BillingPlans plans)
        {
            var date = SystemClock.UtcNow.Floor(TimeSpan.FromHours(1));

            organization.OverageHours.SetUsage(date, (int)total, (int)blocked, (int)tooBig, organization.GetHourlyEventLimit(plans), TimeSpan.FromDays(3));
        }
Exemplo n.º 27
0
 public static IEnumerable <Organization> GenerateOrganizations(BillingManager billingManager, BillingPlans plans, int count = 10, bool generateId = false, string id = null)
 {
     for (int i = 0; i < count; i++)
     {
         yield return(GenerateOrganization(billingManager, plans, generateId, id));
     }
 }
Exemplo n.º 28
0
 public static List <Organization> GenerateSampleOrganizations(BillingManager billingManager, BillingPlans plans)
 {
     return(new List <Organization> {
         GenerateSampleOrganization(billingManager, plans),
         GenerateOrganization(billingManager, plans, id: TestConstants.OrganizationId2, inviteEmail: TestConstants.InvitedOrganizationUserEmail),
         GenerateOrganization(billingManager, plans, id: TestConstants.OrganizationId3, inviteEmail: TestConstants.InvitedOrganizationUserEmail),
         GenerateOrganization(billingManager, plans, id: TestConstants.OrganizationId4, inviteEmail: TestConstants.InvitedOrganizationUserEmail),
         GenerateOrganization(billingManager, plans, id: TestConstants.SuspendedOrganizationId, inviteEmail: TestConstants.InvitedOrganizationUserEmail, isSuspended: true),
     });
 }
Exemplo n.º 29
0
 public OrganizationRepository(ExceptionlessElasticConfiguration configuration, IValidator <Organization> validator, BillingPlans plans, IOptions <AppOptions> options)
     : base(configuration.Organizations, validator, options)
 {
     _plans = plans;
 }
Exemplo n.º 30
0
 public GeoTests(ServicesFixture fixture, ITestOutputHelper output) : base(fixture, output)
 {
     _billingManager = GetService <BillingManager>();
     _plans          = GetService <BillingPlans>();
     _options        = GetService <IOptions <AppOptions> >();
 }