mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Create Screenshot of Conversation for Manual
This commit is contained in:
@@ -3,6 +3,7 @@ locales ['en-US']
|
|||||||
use_tests_in_classes([
|
use_tests_in_classes([
|
||||||
'org.briarproject.briar.android.login.SetupActivityScreenshotTest',
|
'org.briarproject.briar.android.login.SetupActivityScreenshotTest',
|
||||||
'org.briarproject.briar.android.settings.SettingsActivityScreenshotTest',
|
'org.briarproject.briar.android.settings.SettingsActivityScreenshotTest',
|
||||||
|
'org.briarproject.briar.android.contact.ConversationActivityScreenshotTest',
|
||||||
])
|
])
|
||||||
app_apk_path "build/outputs/apk/screenshot/debug/briar-android-screenshot-debug.apk"
|
app_apk_path "build/outputs/apk/screenshot/debug/briar-android-screenshot-debug.apk"
|
||||||
tests_apk_path "build/outputs/apk/androidTest/screenshot/debug/briar-android-screenshot-debug-androidTest.apk"
|
tests_apk_path "build/outputs/apk/androidTest/screenshot/debug/briar-android-screenshot-debug-androidTest.apk"
|
||||||
|
|||||||
@@ -4,4 +4,8 @@ adb shell am broadcast -a com.android.systemui.demo -e command enter
|
|||||||
adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
|
adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
|
||||||
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100
|
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100
|
||||||
adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show
|
adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show
|
||||||
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1337
|
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1337
|
||||||
|
|
||||||
|
# workaround for Android Pie hidden API Espresso bug
|
||||||
|
adb shell settings put global hidden_api_policy_pre_p_apps 1
|
||||||
|
adb shell settings put global hidden_api_policy_p_apps 1
|
||||||
|
|||||||
@@ -12,4 +12,4 @@
|
|||||||
-keep class junit.** { *; }
|
-keep class junit.** { *; }
|
||||||
-dontwarn junit.**
|
-dontwarn junit.**
|
||||||
|
|
||||||
-dontwarn org.briarproject.briar.android.BriarTestComponentApplication
|
-dontwarn org.briarproject.briar.android.**
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import org.briarproject.bramble.BrambleAndroidModule;
|
|||||||
import org.briarproject.bramble.BrambleCoreModule;
|
import org.briarproject.bramble.BrambleCoreModule;
|
||||||
import org.briarproject.bramble.account.BriarAccountModule;
|
import org.briarproject.bramble.account.BriarAccountModule;
|
||||||
import org.briarproject.briar.BriarCoreModule;
|
import org.briarproject.briar.BriarCoreModule;
|
||||||
|
import org.briarproject.briar.android.contact.ConversationActivityScreenshotTest;
|
||||||
import org.briarproject.briar.android.login.SetupActivityScreenshotTest;
|
import org.briarproject.briar.android.login.SetupActivityScreenshotTest;
|
||||||
import org.briarproject.briar.android.navdrawer.NavDrawerActivityTest;
|
import org.briarproject.briar.android.navdrawer.NavDrawerActivityTest;
|
||||||
import org.briarproject.briar.android.settings.SettingsActivityScreenshotTest;
|
import org.briarproject.briar.android.settings.SettingsActivityScreenshotTest;
|
||||||
@@ -22,6 +23,7 @@ import dagger.Component;
|
|||||||
})
|
})
|
||||||
public interface BriarUiTestComponent extends AndroidComponent {
|
public interface BriarUiTestComponent extends AndroidComponent {
|
||||||
|
|
||||||
|
void inject(ConversationActivityScreenshotTest test);
|
||||||
void inject(SetupActivityScreenshotTest test);
|
void inject(SetupActivityScreenshotTest test);
|
||||||
void inject(NavDrawerActivityTest test);
|
void inject(NavDrawerActivityTest test);
|
||||||
void inject(SettingsActivityScreenshotTest test);
|
void inject(SettingsActivityScreenshotTest test);
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package org.briarproject.briar.android.contact;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FormatException;
|
||||||
|
import org.briarproject.bramble.api.contact.Contact;
|
||||||
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.BriarUiTestComponent;
|
||||||
|
import org.briarproject.briar.android.test.ScreenshotTest;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import static android.support.test.InstrumentationRegistry.getInstrumentation;
|
||||||
|
import static android.support.test.InstrumentationRegistry.getTargetContext;
|
||||||
|
import static android.support.test.espresso.Espresso.onView;
|
||||||
|
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
|
||||||
|
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||||
|
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
||||||
|
import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID;
|
||||||
|
import static org.briarproject.briar.android.contact.ConversationActivity.CONTACT_ID;
|
||||||
|
import static org.briarproject.briar.android.test.ViewActions.waitUntilMatches;
|
||||||
|
import static org.hamcrest.Matchers.allOf;
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class ConversationActivityScreenshotTest extends ScreenshotTest {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public CleanAccountTestRule<ConversationActivity> testRule =
|
||||||
|
new CleanAccountTestRule<>(ConversationActivity.class,
|
||||||
|
this::createTestData);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void inject(BriarUiTestComponent component) {
|
||||||
|
component.inject(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void messaging() {
|
||||||
|
Context targetContext = getInstrumentation().getTargetContext();
|
||||||
|
Intent intent = new Intent(targetContext, ConversationActivity.class);
|
||||||
|
intent.putExtra(CONTACT_ID, 1);
|
||||||
|
testRule.launchActivity(intent);
|
||||||
|
|
||||||
|
onView(withId(R.id.conversationView)).perform(waitUntilMatches(
|
||||||
|
allOf(withText(R.string.screenshot_message_3), isDisplayed())));
|
||||||
|
|
||||||
|
screenshot("manual_messaging");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createTestData() {
|
||||||
|
try {
|
||||||
|
createTestDataExceptions();
|
||||||
|
} catch (DbException | FormatException e) {
|
||||||
|
throw new AssertionError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createTestDataExceptions()
|
||||||
|
throws DbException, FormatException {
|
||||||
|
String bobName =
|
||||||
|
getTargetContext().getString(R.string.screenshot_bob);
|
||||||
|
Contact bob = testDataCreator.addContact(bobName);
|
||||||
|
|
||||||
|
String bobHi = getTargetContext()
|
||||||
|
.getString(R.string.screenshot_message_1);
|
||||||
|
long bobTime = getMinutesAgo(2);
|
||||||
|
testDataCreator.addPrivateMessage(bob, bobHi, bobTime, true);
|
||||||
|
|
||||||
|
String aliceHi = getTargetContext()
|
||||||
|
.getString(R.string.screenshot_message_2);
|
||||||
|
long aliceTime = getMinutesAgo(1);
|
||||||
|
testDataCreator.addPrivateMessage(bob, aliceHi, aliceTime, false);
|
||||||
|
|
||||||
|
String bobHi2 = getTargetContext()
|
||||||
|
.getString(R.string.screenshot_message_3);
|
||||||
|
long bobTime2 = getMinutesAgo(0);
|
||||||
|
testDataCreator.addPrivateMessage(bob, bobHi2, bobTime2, true);
|
||||||
|
|
||||||
|
connectionRegistry.registerConnection(bob.getId(), ID, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,15 +1,22 @@
|
|||||||
package org.briarproject.briar.android.test;
|
package org.briarproject.briar.android.test;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.account.AccountManager;
|
import org.briarproject.bramble.api.account.AccountManager;
|
||||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.plugin.ConnectionRegistry;
|
||||||
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
|
import org.briarproject.briar.android.BriarService;
|
||||||
import org.briarproject.briar.android.BriarTestComponentApplication;
|
import org.briarproject.briar.android.BriarTestComponentApplication;
|
||||||
import org.briarproject.briar.android.BriarUiTestComponent;
|
import org.briarproject.briar.android.BriarUiTestComponent;
|
||||||
|
import org.briarproject.briar.api.test.TestDataCreator;
|
||||||
import org.junit.ClassRule;
|
import org.junit.ClassRule;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import tools.fastlane.screengrab.Screengrab;
|
import tools.fastlane.screengrab.Screengrab;
|
||||||
@@ -31,6 +38,12 @@ public abstract class ScreenshotTest {
|
|||||||
protected AccountManager accountManager;
|
protected AccountManager accountManager;
|
||||||
@Inject
|
@Inject
|
||||||
protected LifecycleManager lifecycleManager;
|
protected LifecycleManager lifecycleManager;
|
||||||
|
@Inject
|
||||||
|
protected TestDataCreator testDataCreator;
|
||||||
|
@Inject
|
||||||
|
protected ConnectionRegistry connectionRegistry;
|
||||||
|
@Inject
|
||||||
|
protected Clock clock;
|
||||||
|
|
||||||
public ScreenshotTest() {
|
public ScreenshotTest() {
|
||||||
super();
|
super();
|
||||||
@@ -55,11 +68,30 @@ public abstract class ScreenshotTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected long getMinutesAgo(int minutes) {
|
||||||
|
return clock.currentTimeMillis() - minutes * 60 * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNullByDefault
|
||||||
protected class CleanAccountTestRule<A extends Activity>
|
protected class CleanAccountTestRule<A extends Activity>
|
||||||
extends IntentsTestRule<A> {
|
extends IntentsTestRule<A> {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private final Runnable runnable;
|
||||||
|
|
||||||
public CleanAccountTestRule(Class<A> activityClass) {
|
public CleanAccountTestRule(Class<A> activityClass) {
|
||||||
super(activityClass);
|
super(activityClass);
|
||||||
|
this.runnable = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this if you need to run code before launching the activity.
|
||||||
|
* Note: You need to use {@link #launchActivity(Intent)} yourself
|
||||||
|
* to start the activity.
|
||||||
|
*/
|
||||||
|
public CleanAccountTestRule(Class<A> activityClass, Runnable runnable) {
|
||||||
|
super(activityClass, false, false);
|
||||||
|
this.runnable = runnable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -67,6 +99,17 @@ public abstract class ScreenshotTest {
|
|||||||
super.beforeActivityLaunched();
|
super.beforeActivityLaunched();
|
||||||
accountManager.deleteAccount();
|
accountManager.deleteAccount();
|
||||||
accountManager.createAccount(USERNAME, PASSWORD);
|
accountManager.createAccount(USERNAME, PASSWORD);
|
||||||
|
if (runnable != null) {
|
||||||
|
Intent serviceIntent =
|
||||||
|
new Intent(getTargetContext(), BriarService.class);
|
||||||
|
getTargetContext().startService(serviceIntent);
|
||||||
|
try {
|
||||||
|
lifecycleManager.waitForStartup();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new AssertionError(e);
|
||||||
|
}
|
||||||
|
runnable.run();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -478,4 +478,20 @@
|
|||||||
<string name="lock_is_locked">Briar is locked</string>
|
<string name="lock_is_locked">Briar is locked</string>
|
||||||
<string name="lock_tap_to_unlock">Tap to unlock</string>
|
<string name="lock_tap_to_unlock">Tap to unlock</string>
|
||||||
|
|
||||||
|
<!-- Screenshots -->
|
||||||
|
|
||||||
|
<!-- This is a name to be used in screenshots. Feel free to change it to a local name. -->
|
||||||
|
<string name="screenshot_alice">Alice</string>
|
||||||
|
<!-- This is a name to be used in screenshots. Feel free to change it to a local name. -->
|
||||||
|
<string name="screenshot_bob">Bob</string>
|
||||||
|
<!-- This is a name to be used in screenshots. Feel free to change it to a local name. -->
|
||||||
|
<string name="screenshot_carol">Carol</string>
|
||||||
|
<!-- This is a message to be used in screenshots. Please use the same translation for Bob! -->
|
||||||
|
<string name="screenshot_message_1">Hi Bob!</string>
|
||||||
|
<!-- This is a message to be used in screenshots. Please use the same translation for Alice! -->
|
||||||
|
<string name="screenshot_message_2">Hi Alice! Thanks for telling me about Briar!</string>
|
||||||
|
<!-- This is a message to be used in screenshots. -->
|
||||||
|
<string name="screenshot_message_3">No problem, hope you like it 😀</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
package org.briarproject.briar.api.test;
|
package org.briarproject.briar.api.test;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.FormatException;
|
||||||
|
import org.briarproject.bramble.api.contact.Contact;
|
||||||
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
|
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
public interface TestDataCreator {
|
public interface TestDataCreator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create fake test data on the DatabaseExecutor
|
* Create fake test data on the IoExecutor
|
||||||
*
|
*
|
||||||
* @param numContacts Number of contacts to create. Must be >= 1
|
* @param numContacts Number of contacts to create. Must be >= 1
|
||||||
* @param numPrivateMsgs Number of private messages to create for each
|
* @param numPrivateMsgs Number of private messages to create for each
|
||||||
@@ -18,4 +22,11 @@ public interface TestDataCreator {
|
|||||||
void createTestData(int numContacts, int numPrivateMsgs, int numBlogPosts,
|
void createTestData(int numContacts, int numPrivateMsgs, int numBlogPosts,
|
||||||
int numForums, int numForumPosts);
|
int numForums, int numForumPosts);
|
||||||
|
|
||||||
|
@IoExecutor
|
||||||
|
Contact addContact(String name) throws DbException;
|
||||||
|
|
||||||
|
@IoExecutor
|
||||||
|
void addPrivateMessage(Contact contact, String body, long time,
|
||||||
|
boolean local) throws DbException, FormatException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.briarproject.briar.test;
|
|||||||
|
|
||||||
import org.briarproject.bramble.api.FormatException;
|
import org.briarproject.bramble.api.FormatException;
|
||||||
import org.briarproject.bramble.api.client.ClientHelper;
|
import org.briarproject.bramble.api.client.ClientHelper;
|
||||||
|
import org.briarproject.bramble.api.client.ContactGroupFactory;
|
||||||
import org.briarproject.bramble.api.contact.Contact;
|
import org.briarproject.bramble.api.contact.Contact;
|
||||||
import org.briarproject.bramble.api.contact.ContactId;
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
import org.briarproject.bramble.api.contact.ContactManager;
|
import org.briarproject.bramble.api.contact.ContactManager;
|
||||||
@@ -13,15 +14,18 @@ import org.briarproject.bramble.api.db.DatabaseComponent;
|
|||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
import org.briarproject.bramble.api.db.Transaction;
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
import org.briarproject.bramble.api.identity.AuthorFactory;
|
import org.briarproject.bramble.api.identity.AuthorFactory;
|
||||||
|
import org.briarproject.bramble.api.identity.AuthorId;
|
||||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||||
import org.briarproject.bramble.api.identity.LocalAuthor;
|
import org.briarproject.bramble.api.identity.LocalAuthor;
|
||||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.plugin.BluetoothConstants;
|
import org.briarproject.bramble.api.plugin.BluetoothConstants;
|
||||||
import org.briarproject.bramble.api.plugin.LanTcpConstants;
|
import org.briarproject.bramble.api.plugin.LanTcpConstants;
|
||||||
import org.briarproject.bramble.api.plugin.TorConstants;
|
import org.briarproject.bramble.api.plugin.TorConstants;
|
||||||
import org.briarproject.bramble.api.plugin.TransportId;
|
import org.briarproject.bramble.api.plugin.TransportId;
|
||||||
import org.briarproject.bramble.api.properties.TransportProperties;
|
import org.briarproject.bramble.api.properties.TransportProperties;
|
||||||
import org.briarproject.bramble.api.properties.TransportPropertyManager;
|
import org.briarproject.bramble.api.properties.TransportPropertyManager;
|
||||||
|
import org.briarproject.bramble.api.sync.ClientId;
|
||||||
import org.briarproject.bramble.api.sync.Group;
|
import org.briarproject.bramble.api.sync.Group;
|
||||||
import org.briarproject.bramble.api.sync.GroupId;
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
import org.briarproject.bramble.api.sync.MessageId;
|
import org.briarproject.bramble.api.sync.MessageId;
|
||||||
@@ -30,10 +34,12 @@ import org.briarproject.briar.api.blog.Blog;
|
|||||||
import org.briarproject.briar.api.blog.BlogManager;
|
import org.briarproject.briar.api.blog.BlogManager;
|
||||||
import org.briarproject.briar.api.blog.BlogPost;
|
import org.briarproject.briar.api.blog.BlogPost;
|
||||||
import org.briarproject.briar.api.blog.BlogPostFactory;
|
import org.briarproject.briar.api.blog.BlogPostFactory;
|
||||||
|
import org.briarproject.briar.api.blog.BlogSharingManager;
|
||||||
import org.briarproject.briar.api.client.MessageTracker;
|
import org.briarproject.briar.api.client.MessageTracker;
|
||||||
import org.briarproject.briar.api.forum.Forum;
|
import org.briarproject.briar.api.forum.Forum;
|
||||||
import org.briarproject.briar.api.forum.ForumManager;
|
import org.briarproject.briar.api.forum.ForumManager;
|
||||||
import org.briarproject.briar.api.forum.ForumPost;
|
import org.briarproject.briar.api.forum.ForumPost;
|
||||||
|
import org.briarproject.briar.api.forum.ForumSharingManager;
|
||||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||||
import org.briarproject.briar.api.messaging.PrivateMessage;
|
import org.briarproject.briar.api.messaging.PrivateMessage;
|
||||||
import org.briarproject.briar.api.messaging.PrivateMessageFactory;
|
import org.briarproject.briar.api.messaging.PrivateMessageFactory;
|
||||||
@@ -59,6 +65,7 @@ import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
|||||||
import static org.briarproject.briar.test.TestData.AUTHOR_NAMES;
|
import static org.briarproject.briar.test.TestData.AUTHOR_NAMES;
|
||||||
import static org.briarproject.briar.test.TestData.GROUP_NAMES;
|
import static org.briarproject.briar.test.TestData.GROUP_NAMES;
|
||||||
|
|
||||||
|
@NotNullByDefault
|
||||||
public class TestDataCreatorImpl implements TestDataCreator {
|
public class TestDataCreatorImpl implements TestDataCreator {
|
||||||
|
|
||||||
private final Logger LOG =
|
private final Logger LOG =
|
||||||
@@ -75,6 +82,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
private final DatabaseComponent db;
|
private final DatabaseComponent db;
|
||||||
private final IdentityManager identityManager;
|
private final IdentityManager identityManager;
|
||||||
private final ContactManager contactManager;
|
private final ContactManager contactManager;
|
||||||
|
private final ContactGroupFactory contactGroupFactory;
|
||||||
private final TransportPropertyManager transportPropertyManager;
|
private final TransportPropertyManager transportPropertyManager;
|
||||||
private final MessagingManager messagingManager;
|
private final MessagingManager messagingManager;
|
||||||
private final BlogManager blogManager;
|
private final BlogManager blogManager;
|
||||||
@@ -93,6 +101,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
BlogPostFactory blogPostFactory, CryptoComponent cryptoComponent,
|
BlogPostFactory blogPostFactory, CryptoComponent cryptoComponent,
|
||||||
DatabaseComponent db, IdentityManager identityManager,
|
DatabaseComponent db, IdentityManager identityManager,
|
||||||
ContactManager contactManager,
|
ContactManager contactManager,
|
||||||
|
ContactGroupFactory contactGroupFactory,
|
||||||
TransportPropertyManager transportPropertyManager,
|
TransportPropertyManager transportPropertyManager,
|
||||||
MessagingManager messagingManager, BlogManager blogManager,
|
MessagingManager messagingManager, BlogManager blogManager,
|
||||||
ForumManager forumManager, @IoExecutor Executor ioExecutor) {
|
ForumManager forumManager, @IoExecutor Executor ioExecutor) {
|
||||||
@@ -106,6 +115,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
this.db = db;
|
this.db = db;
|
||||||
this.identityManager = identityManager;
|
this.identityManager = identityManager;
|
||||||
this.contactManager = contactManager;
|
this.contactManager = contactManager;
|
||||||
|
this.contactGroupFactory = contactGroupFactory;
|
||||||
this.transportPropertyManager = transportPropertyManager;
|
this.transportPropertyManager = transportPropertyManager;
|
||||||
this.messagingManager = messagingManager;
|
this.messagingManager = messagingManager;
|
||||||
this.blogManager = blogManager;
|
this.blogManager = blogManager;
|
||||||
@@ -146,17 +156,17 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
List<Contact> contacts = new ArrayList<>(numContacts);
|
List<Contact> contacts = new ArrayList<>(numContacts);
|
||||||
LocalAuthor localAuthor = identityManager.getLocalAuthor();
|
LocalAuthor localAuthor = identityManager.getLocalAuthor();
|
||||||
for (int i = 0; i < numContacts; i++) {
|
for (int i = 0; i < numContacts; i++) {
|
||||||
Contact contact = addRandomContact(localAuthor);
|
LocalAuthor author = getRandomAuthor();
|
||||||
|
Contact contact = addContact(localAuthor.getId(), author);
|
||||||
contacts.add(contact);
|
contacts.add(contact);
|
||||||
}
|
}
|
||||||
return contacts;
|
return contacts;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Contact addRandomContact(LocalAuthor localAuthor)
|
private Contact addContact(AuthorId localAuthorId, LocalAuthor author)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
|
|
||||||
// prepare to add contact
|
// prepare to add contact
|
||||||
LocalAuthor author = getRandomAuthor();
|
|
||||||
SecretKey secretKey = getSecretKey();
|
SecretKey secretKey = getSecretKey();
|
||||||
long timestamp = clock.currentTimeMillis();
|
long timestamp = clock.currentTimeMillis();
|
||||||
boolean verified = random.nextBoolean();
|
boolean verified = random.nextBoolean();
|
||||||
@@ -169,10 +179,11 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
Transaction txn = db.startTransaction(false);
|
Transaction txn = db.startTransaction(false);
|
||||||
try {
|
try {
|
||||||
ContactId contactId = contactManager
|
ContactId contactId = contactManager
|
||||||
.addContact(txn, author, localAuthor.getId(), secretKey,
|
.addContact(txn, author, localAuthorId, secretKey,
|
||||||
timestamp, true, verified, true);
|
timestamp, true, verified, true);
|
||||||
transportPropertyManager.addRemoteProperties(txn, contactId, props);
|
transportPropertyManager.addRemoteProperties(txn, contactId, props);
|
||||||
contact = db.getContact(txn, contactId);
|
contact = db.getContact(txn, contactId);
|
||||||
|
fakeClientVisibilities(txn, contact);
|
||||||
db.commitTransaction(txn);
|
db.commitTransaction(txn);
|
||||||
} finally {
|
} finally {
|
||||||
db.endTransaction(txn);
|
db.endTransaction(txn);
|
||||||
@@ -186,14 +197,27 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
return contact;
|
return contact;
|
||||||
}
|
}
|
||||||
|
|
||||||
private LocalAuthor getRandomAuthor() {
|
@Override
|
||||||
int i = random.nextInt(AUTHOR_NAMES.length);
|
public Contact addContact(String name) throws DbException {
|
||||||
String authorName = AUTHOR_NAMES[i];
|
// load localAuthor from DB, because cache doesn't get refreshed
|
||||||
|
// when Espresso tests run within one lifecycle
|
||||||
|
Transaction txn = db.startTransaction(false);
|
||||||
|
LocalAuthor localAuthor = db.getLocalAuthors(txn).iterator().next();
|
||||||
|
db.endTransaction(txn);
|
||||||
|
return addContact(localAuthor.getId(), getAuthor(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalAuthor getAuthor(String name) {
|
||||||
KeyPair keyPair = cryptoComponent.generateSignatureKeyPair();
|
KeyPair keyPair = cryptoComponent.generateSignatureKeyPair();
|
||||||
byte[] publicKey = keyPair.getPublic().getEncoded();
|
byte[] publicKey = keyPair.getPublic().getEncoded();
|
||||||
byte[] privateKey = keyPair.getPrivate().getEncoded();
|
byte[] privateKey = keyPair.getPrivate().getEncoded();
|
||||||
return authorFactory.createLocalAuthor(authorName, publicKey,
|
return authorFactory.createLocalAuthor(name, publicKey, privateKey);
|
||||||
privateKey);
|
}
|
||||||
|
|
||||||
|
private LocalAuthor getRandomAuthor() {
|
||||||
|
int i = random.nextInt(AUTHOR_NAMES.length);
|
||||||
|
String authorName = AUTHOR_NAMES[i];
|
||||||
|
return getAuthor(authorName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SecretKey getSecretKey() {
|
private SecretKey getSecretKey() {
|
||||||
@@ -285,7 +309,8 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
Group group = messagingManager.getContactGroup(contact);
|
Group group = messagingManager.getContactGroup(contact);
|
||||||
for (int i = 0; i < numPrivateMsgs; i++) {
|
for (int i = 0; i < numPrivateMsgs; i++) {
|
||||||
try {
|
try {
|
||||||
createPrivateMessage(group.getId(), i);
|
createRandomPrivateMessage(contact.getId(), group.getId(),
|
||||||
|
i);
|
||||||
} catch (FormatException e) {
|
} catch (FormatException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@@ -297,23 +322,30 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createPrivateMessage(GroupId groupId, int num)
|
private void createRandomPrivateMessage(ContactId contactId,
|
||||||
throws DbException, FormatException {
|
GroupId groupId, int num) throws DbException, FormatException {
|
||||||
long timestamp = clock.currentTimeMillis() - num * 60 * 1000;
|
long timestamp = clock.currentTimeMillis() - num * 60 * 1000;
|
||||||
String body = getRandomText();
|
String body = getRandomText();
|
||||||
|
boolean local = random.nextBoolean();
|
||||||
|
createPrivateMessage(contactId, groupId, body, timestamp, local);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createPrivateMessage(ContactId contactId, GroupId groupId,
|
||||||
|
String body, long timestamp, boolean local)
|
||||||
|
throws DbException, FormatException {
|
||||||
PrivateMessage m = privateMessageFactory
|
PrivateMessage m = privateMessageFactory
|
||||||
.createPrivateMessage(groupId, timestamp, body);
|
.createPrivateMessage(groupId, timestamp, body);
|
||||||
|
|
||||||
boolean local = random.nextBoolean();
|
|
||||||
BdfDictionary meta = new BdfDictionary();
|
BdfDictionary meta = new BdfDictionary();
|
||||||
meta.put("timestamp", timestamp);
|
meta.put("timestamp", timestamp);
|
||||||
meta.put("local", local);
|
meta.put("local", local);
|
||||||
meta.put("read", local); // all local messages are read
|
meta.put("read", local); // all local messages are read
|
||||||
|
|
||||||
Transaction txn = db.startTransaction(false);
|
Transaction txn = db.startTransaction(false);
|
||||||
try {
|
try {
|
||||||
clientHelper.addLocalMessage(txn, m.getMessage(), meta, true);
|
clientHelper.addLocalMessage(txn, m.getMessage(), meta, true);
|
||||||
if (local) messageTracker.trackOutgoingMessage(txn, m.getMessage());
|
if (local) {
|
||||||
|
messageTracker.trackOutgoingMessage(txn, m.getMessage());
|
||||||
|
db.receiveMessage(txn, contactId, m.getMessage());
|
||||||
|
}
|
||||||
else messageTracker.trackIncomingMessage(txn, m.getMessage());
|
else messageTracker.trackIncomingMessage(txn, m.getMessage());
|
||||||
db.commitTransaction(txn);
|
db.commitTransaction(txn);
|
||||||
} finally {
|
} finally {
|
||||||
@@ -321,6 +353,14 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPrivateMessage(Contact contact, String body, long time,
|
||||||
|
boolean local) throws DbException, FormatException {
|
||||||
|
Group group = messagingManager.getContactGroup(contact);
|
||||||
|
createPrivateMessage(contact.getId(), group.getId(), body, time,
|
||||||
|
local);
|
||||||
|
}
|
||||||
|
|
||||||
private void createBlogPosts(List<Contact> contacts, int numBlogPosts)
|
private void createBlogPosts(List<Contact> contacts, int numBlogPosts)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
for (int i = 0; i < numBlogPosts; i++) {
|
for (int i = 0; i < numBlogPosts; i++) {
|
||||||
@@ -399,6 +439,23 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fakeClientVisibilities(Transaction txn, Contact contact)
|
||||||
|
throws DbException {
|
||||||
|
fakeClientVisibilities(txn, contact, MessagingManager.CLIENT_ID,
|
||||||
|
MessagingManager.MAJOR_VERSION);
|
||||||
|
fakeClientVisibilities(txn, contact, ForumSharingManager.CLIENT_ID,
|
||||||
|
ForumSharingManager.MAJOR_VERSION);
|
||||||
|
fakeClientVisibilities(txn, contact, BlogSharingManager.CLIENT_ID,
|
||||||
|
BlogSharingManager.MAJOR_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fakeClientVisibilities(Transaction txn, Contact contact,
|
||||||
|
ClientId clientId, int majorVersion) throws DbException {
|
||||||
|
Group group = contactGroupFactory
|
||||||
|
.createContactGroup(clientId, majorVersion, contact);
|
||||||
|
db.setGroupVisibility(txn, contact.getId(), group.getId(), SHARED);
|
||||||
|
}
|
||||||
|
|
||||||
private String getRandomText() {
|
private String getRandomText() {
|
||||||
int minLength = 3 + random.nextInt(500);
|
int minLength = 3 + random.nextInt(500);
|
||||||
int maxWordLength = 15;
|
int maxWordLength = 15;
|
||||||
|
|||||||
Reference in New Issue
Block a user