public object Any(SyncAccountsDaily request) { var users = DiscourseClient.AdminGetUsers(1000); foreach (var discourseUser in users) { //Don't process discourse administrators or already suspended users if (discourseUser.Admin || discourseUser.IsSuspended()) { continue; } UserServiceResponse existingCustomerSubscription; try { existingCustomerSubscription = ServiceStackAccountClient.GetUserSubscription(discourseUser.Email); } catch (Exception e) { Log.Error("Failed to check user {0} subscription. Retrying... - {2}".Fmt(discourseUser.Username, e.Message)); try { existingCustomerSubscription = ServiceStackAccountClient.GetUserSubscription(discourseUser.Email); } catch (Exception ex) { Log.Error("Failed to check user {0} subscription. Cancelling sync. - {1}".Fmt(discourseUser.Username, ex.Message)); break; } } //Skip users with valid SS subscriptions. if (existingCustomerSubscription.HasValidSubscription()) { continue; } try { Thread.Sleep(2000); //Existing user with active account but without a valid subscription if (!discourseUser.NeedsApproval() && discourseUser.IsNotSuspended()) { Log.Info("Suspending user '{0}'.".Fmt(discourseUser.Email)); SuspendUser(discourseUser); } } catch (Exception e) { Log.Error("Failed to suspend Discourse for user '{0}'. - {1}".Fmt(discourseUser.Email, e.Message)); } } return(null); }
public void TestSyncExpiredAccount() { var service = appHost.Container.Resolve <DailyServices>(); var req = new SyncAccountsDaily(); service.Any(req); var discourseClient = appHost.Resolve <IDiscourseClient>() as MockDiscourseClient; Assert.That(discourseClient != null); Assert.That(discourseClient.SuspendCalledCount == 1); }