|
@@ -14,6 +14,8 @@
|
|
|
|
|
|
"""Tests REST events for /rooms paths."""
|
|
|
|
|
|
+from typing import List
|
|
|
+
|
|
|
from synapse.api.constants import APP_SERVICE_REGISTRATION_TYPE, LoginType
|
|
|
from synapse.api.errors import Codes, HttpResponseException, SynapseError
|
|
|
from synapse.appservice import ApplicationService
|
|
@@ -229,6 +231,78 @@ class TestMauLimit(unittest.HomeserverTestCase):
|
|
|
self.reactor.advance(100)
|
|
|
self.assertEqual(2, self.successResultOf(count))
|
|
|
|
|
|
+ @override_config(
|
|
|
+ {
|
|
|
+ "mau_trial_days": 3,
|
|
|
+ "mau_appservice_trial_days": {"SomeASID": 1, "AnotherASID": 2},
|
|
|
+ }
|
|
|
+ )
|
|
|
+ def test_as_trial_days(self):
|
|
|
+ user_tokens: List[str] = []
|
|
|
+
|
|
|
+ def advance_time_and_sync():
|
|
|
+ self.reactor.advance(24 * 60 * 61)
|
|
|
+ for token in user_tokens:
|
|
|
+ self.do_sync_for_user(token)
|
|
|
+
|
|
|
+ # Cheekily add an application service that we use to register a new user
|
|
|
+ # with.
|
|
|
+ as_token_1 = "foobartoken1"
|
|
|
+ self.store.services_cache.append(
|
|
|
+ ApplicationService(
|
|
|
+ token=as_token_1,
|
|
|
+ hostname=self.hs.hostname,
|
|
|
+ id="SomeASID",
|
|
|
+ sender="@as_sender_1:test",
|
|
|
+ namespaces={"users": [{"regex": "@as_1.*", "exclusive": True}]},
|
|
|
+ )
|
|
|
+ )
|
|
|
+
|
|
|
+ as_token_2 = "foobartoken2"
|
|
|
+ self.store.services_cache.append(
|
|
|
+ ApplicationService(
|
|
|
+ token=as_token_2,
|
|
|
+ hostname=self.hs.hostname,
|
|
|
+ id="AnotherASID",
|
|
|
+ sender="@as_sender_2:test",
|
|
|
+ namespaces={"users": [{"regex": "@as_2.*", "exclusive": True}]},
|
|
|
+ )
|
|
|
+ )
|
|
|
+
|
|
|
+ user_tokens.append(self.create_user("kermit1"))
|
|
|
+ user_tokens.append(self.create_user("kermit2"))
|
|
|
+ user_tokens.append(
|
|
|
+ self.create_user("as_1kermit3", token=as_token_1, appservice=True)
|
|
|
+ )
|
|
|
+ user_tokens.append(
|
|
|
+ self.create_user("as_2kermit4", token=as_token_2, appservice=True)
|
|
|
+ )
|
|
|
+
|
|
|
+ # Advance time by 1 day to include the first appservice
|
|
|
+ advance_time_and_sync()
|
|
|
+ self.assertEqual(
|
|
|
+ self.get_success(self.store.get_monthly_active_count_by_service()),
|
|
|
+ {"SomeASID": 1},
|
|
|
+ )
|
|
|
+
|
|
|
+ # Advance time by 1 day to include the next appservice
|
|
|
+ advance_time_and_sync()
|
|
|
+ self.assertEqual(
|
|
|
+ self.get_success(self.store.get_monthly_active_count_by_service()),
|
|
|
+ {"SomeASID": 1, "AnotherASID": 1},
|
|
|
+ )
|
|
|
+
|
|
|
+ # Advance time by 1 day to include the native users
|
|
|
+ advance_time_and_sync()
|
|
|
+ self.assertEqual(
|
|
|
+ self.get_success(self.store.get_monthly_active_count_by_service()),
|
|
|
+ {
|
|
|
+ "SomeASID": 1,
|
|
|
+ "AnotherASID": 1,
|
|
|
+ "native": 2,
|
|
|
+ },
|
|
|
+ )
|
|
|
+
|
|
|
def create_user(self, localpart, token=None, appservice=False):
|
|
|
request_data = {
|
|
|
"username": localpart,
|