/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.waveprotocol.wave.media.model;
import junit.framework.TestCase;
import org.waveprotocol.wave.media.model.Attachment.ImageMetadata;
import org.waveprotocol.wave.media.model.Attachment.Status;
import org.waveprotocol.wave.model.document.Doc;
import org.waveprotocol.wave.model.document.ObservableDocument;
import org.waveprotocol.wave.model.testing.BasicFactories;
/**
* Tests that the AttachmentDocumentWrapper correctly passes data to and from its underlying
* MutableDocument.
*
*/
public class AttachmentDocumentWrapperTest extends TestCase {
private static final String CREATOR = "a_user";
private static final String FILENAME = "a file.jpg";
private static final Long SIZE = 123456789123L;
private static final String MIME_TYPE = "image/jpeg";
private static final long UPLOAD_PROGRESS = 12345L;
private static final Attachment.Status UPLOAD_STATUS = Status.IN_PROGRESS;
private static final int IMAGE_HEIGHT = 123;
private static final int IMAGE_WIDTH = 234;
private static final int THUMB_HEIGHT = 345;
private static final int THUMB_WIDTH = 456;
/**
* Tests that all of the basic fields (ie excluding thumbnail and image metadata) can be correctly
* read.
*/
public void testBasicMetadata() {
MutableClientAttachment wrapper = createBasicWrapper();
checkBasicFields(wrapper);
assertNull(wrapper.getContentImageMetadata());
assertNull(wrapper.getThumbnailImageMetadata());
}
/**
* Tests that all of the fields are correctly populated, including thumbnail and image metadata.
*/
public void testFullWrapper() {
AttachmentDocumentWrapper<Doc.N, Doc.E, Doc.T> wrapper = createFullWrapper();
checkBasicFields(wrapper);
checkElementFields(wrapper);
}
/**
* Tests that mutations are correctly persisted.
*/
public void testMutableWrapper() {
MutableClientAttachment wrapper = createBasicWrapper();
wrapper.setSize(SIZE + 1);
wrapper.setFilename(FILENAME + ".foo");
wrapper.setMalware(true);
wrapper.setMimeType(MIME_TYPE + "!");
wrapper.setStatus(UPLOAD_STATUS);
wrapper.setUploadedByteCount(UPLOAD_PROGRESS + 1);
wrapper.setThumbnail(THUMB_WIDTH, THUMB_HEIGHT);
wrapper.setImage(IMAGE_WIDTH, IMAGE_HEIGHT);
assertEquals(FILENAME + ".foo", wrapper.getFilename());
assertEquals(MIME_TYPE + "!", wrapper.getMimeType());
assertEquals(Long.valueOf(SIZE + 1), wrapper.getSize());
assertEquals(UPLOAD_STATUS, wrapper.getStatus());
assertEquals(UPLOAD_PROGRESS + 1, wrapper.getUploadedByteCount());
assertTrue(wrapper.isMalware());
checkElementFields(wrapper);
}
/**
* Checks that all of the attribute fields have been set correctly.
*
* @param wrapper the wrapper to check
*/
private static void checkBasicFields(MutableClientAttachment wrapper) {
assertEquals(FILENAME, wrapper.getFilename());
assertEquals(CREATOR, wrapper.getCreator());
assertEquals(MIME_TYPE, wrapper.getMimeType());
assertEquals(SIZE, wrapper.getSize());
assertEquals(UPLOAD_PROGRESS, wrapper.getUploadedByteCount());
assertEquals(UPLOAD_STATUS, wrapper.getStatus());
assertFalse(wrapper.isMalware());
}
/**
* Checks the values on the thumbnail and image metadata fields.
*
* @param wrapper the wrapper
*/
private static void checkElementFields(MutableClientAttachment wrapper) {
ImageMetadata attachmentImage = wrapper.getContentImageMetadata();
assertEquals(IMAGE_HEIGHT, attachmentImage.getHeight());
assertEquals(IMAGE_WIDTH, attachmentImage.getWidth());
ImageMetadata attachmentThumbnail = wrapper.getThumbnailImageMetadata();
assertEquals(THUMB_HEIGHT, attachmentThumbnail.getHeight());
assertEquals(THUMB_WIDTH, attachmentThumbnail.getWidth());
}
/**
* Creates a basic wrapper, missing the optional image and thumbnail metadata fields.
*
* @return the new wrapper
*/
private AttachmentDocumentWrapper<Doc.N, Doc.E, Doc.T> createBasicWrapper() {
ObservableDocument document = BasicFactories.observableDocumentProvider()
.parse(String.format(
"<node key=\"upload_progress\" value=\"%d\"/>"
+ "<node key=\"creator\" value=\"%s\"/>"
+ "<node key=\"attachment_size\" value=\"%d\"/>"
+ "<node key=\"malware\" value=\"false\"/>"
+ "<node key=\"status\" value=\"%s\"/>"
+ "<node key=\"filename\" value=\"%s\"/>"
+ "<node key=\"mime_type\" value=\"%s\"/>",
UPLOAD_PROGRESS, CREATOR, SIZE, UPLOAD_STATUS, FILENAME, MIME_TYPE));
return new AttachmentDocumentWrapper<Doc.N, Doc.E, Doc.T>(document);
}
/**
* Creates a full wrapper with image and thumbnail elements populated.
*
* @return the new wrapper
*/
private AttachmentDocumentWrapper<Doc.N, Doc.E, Doc.T> createFullWrapper() {
ObservableDocument document = BasicFactories.observableDocumentProvider()
.parse(String.format(
"<node key=\"upload_progress\" value=\"%d\"/>"
+ "<node key=\"creator\" value=\"%s\"/>"
+ "<node key=\"attachment_size\" value=\"%d\"/>"
+ "<node key=\"malware\" value=\"false\"/>"
+ "<node key=\"status\" value=\"%s\"/>"
+ "<node key=\"filename\" value=\"%s\"/>"
+ "<node key=\"mime_type\" value=\"%s\"/>"
+ "<node key=\"image_height\" value=\"%d\"/>"
+ "<node key=\"image_width\" value=\"%d\"/>"
+ "<node key=\"thumbnail_height\" value=\"%d\"/>"
+ "<node key=\"thumbnail_width\" value=\"%d\"/>",
UPLOAD_PROGRESS, CREATOR, SIZE, UPLOAD_STATUS, FILENAME, MIME_TYPE, IMAGE_HEIGHT,
IMAGE_WIDTH, THUMB_HEIGHT, THUMB_WIDTH));
return new AttachmentDocumentWrapper<Doc.N, Doc.E, Doc.T>(document);
}
}