import com.google.gson.Gson;
import com.instructure.canvasapi.model.Assignment;
import com.instructure.canvasapi.model.DiscussionAttachment;
import com.instructure.canvasapi.model.DiscussionParticipant;
import com.instructure.canvasapi.model.DiscussionTopicHeader;
import com.instructure.canvasapi.model.DiscussionTopicPermission;
import com.instructure.canvasapi.model.LockInfo;
import com.instructure.canvasapi.model.LockedModule;
import com.instructure.canvasapi.model.ModuleCompletionRequirement;
import com.instructure.canvasapi.utilities.CanvasRestAdapter;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;
import java.util.List;
@Config(sdk = 17)
@RunWith(RobolectricGradleTestRunner.class)
public class DiscussionTopicHeaderUnitTest extends Assert {
@Test
public void testDiscussionTopicHeader() {
Gson gson = CanvasRestAdapter.getGSONParser();
DiscussionTopicHeader discussionTopicHeader = gson.fromJson(discussionTopicHeaderJSON, DiscussionTopicHeader.class);
assertNotNull(discussionTopicHeader);
assertTrue(discussionTopicHeader.isPinned());
assertTrue(discussionTopicHeader.getStatus() == DiscussionTopicHeader.ReadState.UNREAD);
assertTrue(discussionTopicHeader.getId() > 0);
assertTrue(discussionTopicHeader.getAssignmentId() > 0);
assertNotNull(discussionTopicHeader.getCreator());
assertNotNull(discussionTopicHeader.getHtmlUrl());
assertNotNull(discussionTopicHeader.getLastReply());
assertNotNull(discussionTopicHeader.getMessage());
assertNotNull(discussionTopicHeader.getMessage());
assertNotNull(discussionTopicHeader.getPostedAt());
assertNotNull(discussionTopicHeader.getTitle());
assertTrue(discussionTopicHeader.getType() == DiscussionTopicHeader.DiscussionType.SIDE_COMMENT);
testDiscussionParticipant(discussionTopicHeader.getCreator());
testDiscussionAttachments(discussionTopicHeader.getAttachments());
testDiscussionPermissions(discussionTopicHeader.getPermission());
}
@Test
public void testLockedDiscussionTopic() {
Gson gson = CanvasRestAdapter.getGSONParser();
DiscussionTopicHeader lockedDiscussion = gson.fromJson(lockedDiscussionTopicJSON, DiscussionTopicHeader.class);
// If the DiscussionTopic is locked for the user, make sure the lock_info & explanation aren't empty/null
if(lockedDiscussion.isLockedForUser()){
assertTrue(!lockedDiscussion.getLockInfo().isEmpty());
assertNotNull(lockedDiscussion.getLockExplanation());
}
LockInfo lockInfo = lockedDiscussion.getLockInfo();
assertNotNull(lockInfo);
// The lock_info should have a context_module
LockedModule lockedModule = lockInfo.getContext_module();
assertNotNull(lockedModule);
assertNotNull(lockedModule.getId());
assertNotNull(lockedModule.getContext_id());
assertNotNull(lockedModule.getContextType());
assertNotNull(lockedModule.getName());
assertNotNull(lockedModule.getUnlock_at());
assertNotNull(lockedModule.isRequireSequentialProgress());
List<ModuleCompletionRequirement> completionRequirements = lockedModule.getCompletionRequirements();
assertNotNull(completionRequirements);
assertEquals(3, completionRequirements.size());
for(ModuleCompletionRequirement requirement : completionRequirements){
assertNotNull(requirement.getId());
assertNotNull(requirement.getType());
}
}
public void testDiscussionParticipant(DiscussionParticipant participant){
assertTrue(participant.getId() > 0);
assertNotNull(participant.getAvatarUrl());
assertNotNull(participant.getDisplayName());
assertNotNull(participant.getHtmlUrl());
}
public void testDiscussionAttachments(List<DiscussionAttachment> attachments){
assertNotNull(attachments);
assertEquals(2, attachments.size());
for(DiscussionAttachment attachment : attachments){
assertNotNull(attachment.getId());
assertNotNull(attachment.isLocked());
assertNotNull(attachment.isLockedForUser());
assertNotNull(attachment.isHidden());
assertNotNull(attachment.isHiddenForUser());
assertNotNull(attachment.getFileSize());
assertNotNull(attachment.getLockAt());
assertNotNull(attachment.getUnlockAt());
assertNotNull(attachment.getUpdatedAt());
assertNotNull(attachment.getCreatedAt());
assertNotNull(attachment.getDisplayName());
assertNotNull(attachment.getFileName());
assertNotNull(attachment.getUrl());
assertNotNull(attachment.getMimeType());
assertNotNull(attachment.getFolderId());
assertNotNull(attachment.getThumbnailUrl());
}
}
public void testDiscussionPermissions(DiscussionTopicPermission permission){
assertNotNull(permission);
assertNotNull(permission.canAttach());
assertNotNull(permission.canUpdate());
assertNotNull(permission.canDelete());
}
String discussionTopicHeaderJSON = "{"
+"\"assignment_id\":3301597,"
+"\"delayed_post_at\":null,"
+"\"id\":2111813,"
+"\"last_reply_at\":\"2013-05-29T15:51:18Z\","
+"\"lock_at\":null,"
+"\"podcast_has_student_posts\":false,"
+"\"posted_at\":\"2013-05-23T22:16:55Z\","
+"\"root_topic_id\":null,"
+"\"title\":\"Which programming language is best?\","
+"\"user_name\":\"Derrick Hathaway\","
+"\"discussion_subentry_count\":2,"
+"\"permissions\":{"
+"\"attach\":true,"
+"\"update\":true,"
+"\"delete\":true"
+"},"
+"\"message\":\"\\u003Cp\\u003EUse complete sentences and plenty of adverbs.\\u003C/p\\u003E\","
+"\"discussion_type\":\"side_comment\","
+"\"require_initial_post\":null,"
+"\"user_can_see_posts\":true,"
+"\"podcast_url\":null,"
+"\"pinned\":true,"
+"\"position\":236,"
+"\"read_state\":\"unread\","
+"\"unread_count\":0,"
+"\"subscribed\":false,"
+"\"topic_children\":[],"
+"\"attachments\":[ "
+"{ \"id\":65668108,"
+"\"folder_id\":4815146,"
+"\"content-type\":\"image/png\","
+"\"display_name\":\"banner.png\","
+"\"filename\":\"banner.png\","
+"\"url\":\"https://pandadev.instructure.com/files/65668108/download\","
+"\"size\":16665,"
+"\"created_at\":\"2015-03-13T15:58:56Z\","
+"\"updated_at\":\"2015-03-13T15:58:56Z\","
+"\"unlock_at\":\"2017-04-13T15:58:56Z\","
+"\"locked\":false,"
+"\"hidden\":false,"
+"\"lock_at\":\"2015-04-13T15:58:56Z\","
+"\"hidden_for_user\":false,"
+"\"thumbnail_url\":\"https://instructure-uploads.s3.amazonaws.com/account_99298/thumbnails/65668108/banner_thumb.png\","
+"\"locked_for_user\":false},"
+"{ \"id\":12345,"
+"\"folder_id\":12343,"
+"\"content-type\":\"image/png\","
+"\"display_name\":\"banner.png\","
+"\"filename\":\"fdsfa.png\","
+"\"url\":\"https://pandadev.instructure.com/files/65668108/download\","
+"\"size\":3432,"
+"\"created_at\":\"2015-03-13T15:58:56Z\","
+"\"updated_at\":\"2015-03-13T15:58:56Z\","
+"\"unlock_at\":\"2017-04-13T15:58:56Z\","
+"\"locked\":false,"
+"\"hidden\":false,"
+"\"lock_at\":\"2015-04-13T15:58:56Z\","
+"\"hidden_for_user\":false,"
+"\"thumbnail_url\":\"https://instructure-uploads.s3.amazonaws.com/account_99298/thumbnails/65668108/banner_thumb.png\","
+"\"locked_for_user\":false}"
+"],"
+"\"published\":true,"
+"\"locked\":false,"
+"\"author\":{"
+"\"id\":170000003828513,"
+"\"display_name\":\"Derrick Hathaway\","
+"\"avatar_image_url\":\"https://secure.gravatar.com/avatar/1753d19b1ddf16cb0a31d983f97f4488?s=50\\u0026d=https%3A%2F%2Fpandadev.instructure.com%2Fimages%2Fdotted_pic.png\","
+"\"html_url\":\"https://pandadev.instructure.com/courses/24219/users/17~3828513\""
+"},"
+"\"html_url\":\"https://pandadev.instructure.com/courses/24219/discussion_topics/2111813\","
+"\"locked_for_user\":false,"
+"\"url\":\"https://pandadev.instructure.com/courses/24219/discussion_topics/2111813\","
+"\"assignment\":{"
+"\"assignment_group_id\":6783,"
+"\"automatic_peer_reviews\":false,"
+"\"description\":\"\\u003Cp\\u003EUse complete sentences and plenty of adverbs.\\u003C/p\\u003E\","
+"\"due_at\":\"2013-05-28T05:59:00Z\","
+"\"grade_group_students_individually\":false,"
+"\"grading_standard_id\":null,"
+"\"grading_type\":\"letter_grade\","
+"\"group_category_id\":null,"
+"\"id\":3301597,"
+"\"lock_at\":null,"
+"\"peer_reviews\":false,"
+"\"points_possible\":6,"
+"\"position\":4,"
+"\"unlock_at\":null,"
+"\"course_id\":24219,"
+"\"name\":\"Which programming language is best?\","
+"\"submission_types\":[\"discussion_topic\"],"
+"\"muted\":false,"
+"\"html_url\":\"https://pandadev.instructure.com/courses/24219/assignments/3301597\","
+"\"needs_grading_count\":1,"
+"\"locked_for_user\":false}"
+"}";
private static final String lockedDiscussionTopicJSON = "{"
+"\"assignment_id\": null,"
+"\"delayed_post_at\": null,"
+"\"discussion_type\": \"side_comment\","
+"\"id\": 2557508,"
+"\"last_reply_at\": \"2013-10-09T21:39:29Z\","
+"\"lock_at\": null,"
+"\"podcast_has_student_posts\": null,"
+"\"position\": 17,"
+"\"posted_at\": \"2013-10-09T21:39:29Z\","
+"\"root_topic_id\": null,"
+"\"title\": \"Locked by module\","
+"\"user_name\": \"Brady fdsa\","
+"\"discussion_subentry_count\": 0,"
+"\"permissions\": {},"
+"\"message\": null,"
+"\"require_initial_post\": null,"
+"\"user_can_see_posts\": true,"
+"\"podcast_url\": null,"
+"\"read_state\": \"read\","
+"\"unread_count\": 0,"
+"\"subscribed\": false,"
+"\"topic_children\": [],"
+"\"attachments\": [],"
+"\"published\": true,"
+"\"can_unpublish\": false,"
+"\"locked\": false,"
+"\"can_lock\": true,"
+"\"author\": {},"
+"\"html_url\": \"https://pandadev.instructure.com/courses/833052/discussion_topics/2557508\","
+"\"url\": \"https://pandadev.instructure.com/courses/833052/discussion_topics/2557508\","
+"\"pinned\": false,"
+"\"group_category_id\": null,"
+"\"can_group\": true,"
+"\"locked_for_user\": true,"
+"\"lock_info\": "
+"{"
+"\"asset_string\": \"discussion_topic_2557508\","
+"\"context_module\": {"
+"\"id\": 1059721,"
+"\"context_id\": 833052,"
+"\"context_type\": \"Course\","
+"\"name\": \"Advanced\","
+"\"position\": 2,"
+"\"prerequisites\": "
+"["
+"{"
+"\"id\": 1059720,"
+"\"type\": \"context_module\","
+"\"name\": \"Beginners\""
+"}"
+"],"
+"\"completion_requirements\": ["
+"{"
+"\"id\": 10371213,"
+"\"type\": \"must_contribute\","
+"\"min_score\": 0,"
+"\"max_score\": null"
+"},"
+"{"
+"\"id\": 10432029,"
+"\"type\": \"must_contribute\","
+"\"min_score\": 0,"
+"\"max_score\": null"
+"},"
+"{"
+"\"id\": 10432069,"
+"\"type\": \"min_score\","
+"\"min_score\": 1,"
+"\"max_score\": null"
+"}"
+"],"
+"\"created_at\": \"2013-07-24T20:08:18Z\","
+"\"updated_at\": \"2014-01-28T04:09:00Z\","
+"\"workflow_state\": \"active\","
+"\"deleted_at\": null,"
+"\"unlock_at\": \"2013-07-31T06:00:00Z\","
+"\"start_at\": null,"
+"\"end_at\": null,"
+"\"migration_id\": null,"
+"\"require_sequential_progress\": false,"
+"\"cloned_item_id\": null,"
+"\"completion_events\": null"
+"}"
+"},"
+"\"lock_explanation\": \"This content is part of the module <b>Advanced</b> and hasn't been unlocked yet.<br/><a href='https://pandadev.instructure.com/courses/833052/modules#module_1059721'>Visit the course modules page for information on how to unlock this content.</a><a href='/courses/833052/modules/1059721/prerequisites/discussion_topic_2557508' style='display: none;' id='module_prerequisites_lookup_link'> </a>\""
+"}";
}