package org.openintents.wifiserver.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.apache.http.HttpResponse;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.openintents.wifiserver.util.StringUtil;
public class TestNotesInterface extends BasicServerTest {
private static final String TAG = TestNotesInterface.class.getSimpleName();
private Random rand = new Random();
@Override
protected void setUp() throws Exception {
super.setUp();
deleteAllNotes();
}
private HttpResponse deleteAllNotes() {
return doGet("http://127.0.0.1:8080/notes/delete");
}
private HttpResponse deleteNote(int id) {
return doGet("http://127.0.0.1:8080/notes/delete?id=" + id);
}
private HttpResponse getAllNotes() {
return doGet("http://127.0.0.1:8080/notes/get");
}
private HttpResponse getNote(int id) {
return doGet("http://127.0.0.1:8080/notes/get?id=" + id);
}
private HttpResponse createNote(Map<String, String> parameters) {
return doPost("http://127.0.0.1:8080/notes/new", parameters);
}
private HttpResponse updateNote(Map<String, String> parameters) {
return doPost("http://127.0.0.1:8080/notes/update", parameters);
}
private Map<String, String> buildTestNote(final boolean id,
final boolean title, final boolean note, final boolean tags) {
return new HashMap<String, String>(4) {
private static final long serialVersionUID = 216769214743685102L;
{
if (id) put("_id", rand.nextInt(1000)+"");
if (title) put("title", "TestTitle_"+rand.nextInt(1000));
if (note) put("note", "TestNote_"+rand.nextInt(1000));
if (tags) put("tags", "TestTag_"+rand.nextInt(1000)+", TestTag_"+rand.nextInt(1000));
}
};
}
/**
* <pre>
* Test case:
* all notes will be deleted
*
* Result:
* status code = 200
* content is empty
* </pre>
*/
public void testDeleteNote() {
HttpResponse response = deleteAllNotes();
assertEquals(200, response.getStatusLine().getStatusCode());
assertEquals(0, response.getEntity().getContentLength());
}
/**
* <pre>
* Test case:
* Get a list of all notes.
* There are no notes in database.
*
* Result:
* status code = 200
* content = "[]"
* </pre>
*
* @throws IOException
* @throws IllegalStateException
*/
public void testGetAllNotes_empty() throws IllegalStateException,
IOException {
HttpResponse response = getAllNotes();
assertEquals(200, response.getStatusLine().getStatusCode());
assertEquals(2, response.getEntity().getContentLength());
assertEquals("[]", StringUtil.fromInputStream(response.getEntity().getContent()));
}
/**
* <pre>
* Test case:
* Get a list of all notes.
* There are two notes in database.
*
* Result:
* status code = 200
* content = "[{<note_1>}, {<note_2>}]"
* </pre>
*/
public void testGetAllNotes_notEmpty() {
Map<String, String> note1 = buildTestNote(false, true, true, false);
Map<String, String> note2 = buildTestNote(false, true, true, false);
createNote(note1);
createNote(note2);
HttpResponse response = getAllNotes();
try {
String stringArray = StringUtil.fromInputStream(response
.getEntity().getContent());
JSONArray jsonArray = new JSONArray(stringArray);
assertEquals(2, jsonArray.length());
JSONObject actualNote1 = jsonArray.getJSONObject(0);
JSONObject actualNote2 = jsonArray.getJSONObject(1);
assertTrue(
(
actualNote1.getString("title").equals(note1.get("title"))
&&
actualNote1.getString("note").equals(note1.get("note"))
&&
actualNote2.getString("title").equals(note2.get("title"))
&&
actualNote2.getString("note").equals(note2.get("note"))
)
||
(
actualNote1.getString("title").equals(note2.get("title"))
&&
actualNote1.getString("note").equals(note2.get("note"))
&&
actualNote2.getString("title").equals(note1.get("title"))
&&
actualNote2.getString("note").equals(note1.get("note"))
)
);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
assertEquals(200, response.getStatusLine().getStatusCode());
}
/**
* <pre>
* Test case:
* create note
*
* Result:
* status code = 200
* content is empty
* </pre>
*/
public void testCreateNote() {
HttpResponse response = createNote(buildTestNote(false, true, true,
false));
assertEquals(200, response.getStatusLine().getStatusCode());
assertEquals(0, response.getEntity().getContentLength());
}
/**
* <pre>
* Test case:
* request a particular note by id
* There are no notes.
*
* Result:
* status code = 404
* content is empty
* </pre>
*/
public void testDeleteAndGetParticularNote() {
HttpResponse response = getNote(rand.nextInt(1000));
assertEquals(404, response.getStatusLine().getStatusCode());
assertEquals(0, response.getEntity().getContentLength());
}
/**
* <pre>
* Test case:
* create new note without "note"-parameter
*
* Result:
* status code = 400
* content is empty
* </pre>
*/
public void testCreateMissingNoteParam() {
HttpResponse response = createNote(buildTestNote(false, true, false,
false));
assertEquals(400, response.getStatusLine().getStatusCode());
assertEquals(0, response.getEntity().getContentLength());
}
/**
* <pre>
* Test case:
* create new note without "title"-parameter
*
* Result:
* status code = 400
* content is empty
* </pre>
*/
public void testCreateMissingTitleParam() {
HttpResponse response = createNote(buildTestNote(false, false, true,
false));
assertEquals(400, response.getStatusLine().getStatusCode());
assertEquals(0, response.getEntity().getContentLength());
}
/**
* <pre>
* Test case:
* update non existing note
*
* Result:
* status code = 400
* content is empty
* </pre>
*/
public void testUpdateNote_nonExistend() {
HttpResponse response = updateNote(buildTestNote(true, true, true,
false));
assertEquals(400, response.getStatusLine().getStatusCode());
assertEquals(0, response.getEntity().getContentLength());
}
/**
* <pre>
* Test case:
* update existing note
*
* Result:
* status code = 200
* content is empty
* </pre>
*/
public void testUpdateNote_Existend() {
Map<String, String> note = buildTestNote(false, true, true, false);
createNote(note);
String id=null;
try {
String stringArray = StringUtil.fromInputStream(getAllNotes()
.getEntity().getContent());
JSONArray jsonArray = new JSONArray(stringArray);
JSONObject actualNote = jsonArray.getJSONObject(0);
id = actualNote.get("_id").toString();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
note.put("_id", id);
note.put("note", "updated test note");
HttpResponse response = updateNote(note);
assertEquals(200, response.getStatusLine().getStatusCode());
assertEquals(0, response.getEntity().getContentLength());
}
}