blob: 7e63d7faf95853a46bdee6b524520ddc7d267efb [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.providers.telephony;
import static android.provider.Telephony.RcsColumns.RcsGroupThreadColumns.CONFERENCE_URI_COLUMN;
import static android.provider.Telephony.RcsColumns.RcsGroupThreadColumns.GROUP_ICON_COLUMN;
import static android.provider.Telephony.RcsColumns.RcsGroupThreadColumns.GROUP_NAME_COLUMN;
import static android.provider.Telephony.RcsColumns.RcsMessageColumns.GLOBAL_ID_COLUMN;
import static android.provider.Telephony.RcsColumns.RcsParticipantColumns.CANONICAL_ADDRESS_ID_COLUMN;
import static android.provider.Telephony.RcsColumns.RcsParticipantColumns.RCS_ALIAS_COLUMN;
import static android.provider.Telephony.RcsColumns.RcsParticipantEventColumns.NEW_ALIAS_COLUMN;
import static android.provider.Telephony.RcsColumns.RcsThreadEventColumns.NEW_NAME_COLUMN;
import static com.android.providers.telephony.RcsProviderHelper.setup1To1Thread;
import static com.google.common.truth.Truth.assertThat;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.support.test.runner.AndroidJUnit4;
import android.test.mock.MockContentResolver;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
@RunWith(AndroidJUnit4.class)
public class RcsProviderInsertTest {
private MockContentResolver mContentResolver;
private RcsProviderTestable mRcsProvider;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mRcsProvider = new RcsProviderTestable();
RcsProviderTestable.MockContextWithProvider
context = new RcsProviderTestable.MockContextWithProvider(mRcsProvider);
mContentResolver = context.getContentResolver();
}
@After
public void tearDown() {
mRcsProvider.tearDown();
}
@Test
public void testInsertUnifiedThreadFails() {
assertThat(mContentResolver.insert(Uri.parse("content://rcs/thread"), null)).isNull();
}
@Test
public void testDuplicate1To1ThreadInsertion() {
Uri uri = setup1To1Thread(mContentResolver);
assertThat(mContentResolver.insert(uri, null)).isNull();
}
@Test
public void testInsertGroupThread() {
ContentValues contentValues = new ContentValues(3);
contentValues.put(CONFERENCE_URI_COLUMN, "conference uri");
contentValues.put(GROUP_NAME_COLUMN, "group name");
contentValues.put(GROUP_ICON_COLUMN, "groupIcon");
assertThat(mContentResolver.insert(Uri.parse("content://rcs/group_thread"),
contentValues)).isEqualTo(Uri.parse("content://rcs/group_thread/1"));
}
@Test
public void testInsertParticipant() {
ContentValues contentValues = new ContentValues();
contentValues.put(CANONICAL_ADDRESS_ID_COLUMN, 6);
contentValues.put(RCS_ALIAS_COLUMN, "Alias");
Uri uri = mContentResolver.insert(Uri.parse("content://rcs/participant"), contentValues);
assertThat(uri).isEqualTo(Uri.parse("content://rcs/participant/1"));
}
@Test
public void testInsertParticipantIntoGroupThread() {
// create a participant
ContentValues contentValues = new ContentValues();
contentValues.put(CANONICAL_ADDRESS_ID_COLUMN, 23);
mContentResolver.insert(Uri.parse("content://rcs/participant"), contentValues);
// create a thread
ContentValues values = new ContentValues(1);
values.put(GROUP_NAME_COLUMN, "Group");
mContentResolver.insert(Uri.parse("content://rcs/group_thread"), values);
// add participant to the thread
Uri uri = Uri.parse("content://rcs/group_thread/1/participant/1");
assertThat(mContentResolver.insert(uri, null)).isEqualTo(uri);
// assert that adding again fails
assertThat(mContentResolver.insert(uri, null)).isNull();
}
@Test
public void testInsertMessageFails() {
ContentValues contentValues = new ContentValues();
contentValues.put(GLOBAL_ID_COLUMN, "global RCS id");
// try inserting messages without threads
assertThat(mContentResolver.insert(Uri.parse("content://rcs/message"),
contentValues)).isNull();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/message/6"),
contentValues)).isNull();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/incoming_message"),
contentValues)).isNull();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/incoming_message/12"),
contentValues)).isNull();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/outgoing_message"),
contentValues)).isNull();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/outgoing_message/18"),
contentValues)).isNull();
// try inserting into unified thread view
assertThat(mContentResolver.insert(Uri.parse("content://rcs/thread/5/incoming_message"),
contentValues)).isNull();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/thread/5/outgoing_message"),
contentValues)).isNull();
}
@Test
@Ignore // TODO: fix and un-ignore
public void testInsertMessageIntoThread() {
// create two threads
setup1To1Thread(mContentResolver);
ContentValues values = new ContentValues();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/group_thread"),
values)).isNotNull();
// add messages to threads
assertThat(mContentResolver.insert(Uri.parse("content://rcs/p2p_thread/1/incoming_message"),
values)).isEqualTo(Uri.parse("content://rcs/p2p_thread/1/incoming_message/1"));
assertThat(mContentResolver.insert(Uri.parse("content://rcs/p2p_thread/1/outgoing_message"),
values)).isEqualTo(Uri.parse("content://rcs/p2p_thread/1/outgoing_message/2"));
assertThat(
mContentResolver.insert(Uri.parse("content://rcs/group_thread/2/incoming_message"),
values)).isEqualTo(
Uri.parse("content://rcs/group_thread/2/incoming_message/3"));
assertThat(
mContentResolver.insert(Uri.parse("content://rcs/group_thread/2/outgoing_message"),
values)).isEqualTo(
Uri.parse("content://rcs/group_thread/2/outgoing_message/4"));
// assert that they are accessible in messages table
Cursor messageCursor = mContentResolver.query(Uri.parse("content://rcs/message"), null,
null, null, null);
assertThat(messageCursor.getCount()).isEqualTo(4);
}
@Test
public void testInsertMessageDelivery() {
setup1To1Thread(mContentResolver);
ContentValues values = new ContentValues();
// add an outgoing message to the thread
assertThat(mContentResolver.insert(Uri.parse("content://rcs/p2p_thread/1/outgoing_message"),
values)).isEqualTo(Uri.parse("content://rcs/p2p_thread/1/outgoing_message/1"));
// add a delivery to the outgoing message
assertThat(mContentResolver.insert(Uri.parse("content://rcs/outgoing_message/1/delivery/1"),
values)).isEqualTo(Uri.parse("content://rcs/outgoing_message/1/delivery/1"));
}
@Test
public void testInsertFileTransfer() {
setup1To1Thread(mContentResolver);
ContentValues values = new ContentValues();
// add an outgoing message to the thread
assertThat(mContentResolver.insert(Uri.parse("content://rcs/p2p_thread/1/outgoing_message"),
values)).isEqualTo(Uri.parse("content://rcs/p2p_thread/1/outgoing_message/1"));
// add a file transfer to the message
assertThat(mContentResolver.insert(Uri.parse("content://rcs/message/1/file_transfer"),
values)).isEqualTo(Uri.parse("content://rcs/file_transfer/1"));
}
@Test
public void testInsertParticipantEvent() {
// create a participant
ContentValues contentValues = new ContentValues();
contentValues.put(CANONICAL_ADDRESS_ID_COLUMN, 23);
mContentResolver.insert(Uri.parse("content://rcs/participant"), contentValues);
// insert an alias change event
ContentValues eventValues = new ContentValues();
eventValues.put(NEW_ALIAS_COLUMN, "new alias");
assertThat(
mContentResolver.insert(Uri.parse("content://rcs/participant/1/alias_change_event"),
eventValues)).isEqualTo(Uri.parse(
"content://rcs/participant/1/alias_change_event/1"));
}
@Test
public void testInsertGroupThreadEvent() {
// create a group thread
ContentValues contentValues = new ContentValues();
assertThat(mContentResolver.insert(Uri.parse("content://rcs/group_thread"),
contentValues)).isEqualTo(Uri.parse("content://rcs/group_thread/1"));
// create a group name change event
ContentValues eventValues = new ContentValues();
eventValues.put(NEW_NAME_COLUMN, "new name");
assertThat(mContentResolver.insert(
Uri.parse("content://rcs/group_thread/1/name_changed_event"),
eventValues)).isEqualTo(Uri.parse(
"content://rcs/group_thread/1/name_changed_event/1"));
}
}