diff --git a/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java b/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java
index 9abeee08f..80653b42a 100644
--- a/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java
+++ b/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java
@@ -19,7 +19,7 @@
*/
package com.omertron.themoviedbapi;
-import static com.omertron.themoviedbapi.tools.ApiUrl.*;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.omertron.themoviedbapi.MovieDbException.MovieDbExceptionType;
import com.omertron.themoviedbapi.model.*;
@@ -28,18 +28,22 @@ import com.omertron.themoviedbapi.results.TmdbResultsMap;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.WebBrowser;
import com.omertron.themoviedbapi.wrapper.*;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.methods.HttpGet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.yamj.api.common.http.CommonHttpClient;
+
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.client.methods.HttpGet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.yamj.api.common.http.CommonHttpClient;
+
+import static com.omertron.themoviedbapi.tools.ApiUrl.*;
/**
* The MovieDb API
This is for version 3 of the API as specified here: http://help.themoviedb.org/kb/api/about-3
@@ -939,17 +943,35 @@ public class TheMovieDbApi {
* A valid session id is required.
*
* @param sessionId
+ * @param movieId
* @param rating
* @throws MovieDbException
+ * @throws JsonProcessingException
*/
- public boolean postMovieRating(String sessionId, String rating) throws MovieDbException {
- ApiUrl apiUrl = new ApiUrl(apiKey, BASE_MOVIE, "/rating");
+ public boolean postMovieRating(String sessionId, Integer movieId, Integer rating) throws MovieDbException {
+ ApiUrl apiUrl = new ApiUrl(apiKey, BASE_MOVIE, movieId+ "/rating");
apiUrl.addArgument(PARAM_SESSION, sessionId);
- apiUrl.addArgument(PARAM_VALUE, rating);
- throw new MovieDbException(MovieDbExceptionType.UNKNOWN_CAUSE, "Not implemented yet");
+ if(rating <0 || rating > 10) {
+ throw new MovieDbException(MovieDbExceptionType.UNKNOWN_CAUSE, "rating out of range");
+ }
+
+ String jsonBody;
+
+ // note exception will never be thrown
+ try {
+ jsonBody = new ObjectMapper().writeValueAsString(Collections.singletonMap("value", (double) rating));
+ } catch (JsonProcessingException ignored) {
+ throw new RuntimeException(ignored);
+ }
+
+ URL url = apiUrl.buildUrl();
+ String webpage = WebBrowser.request(url, jsonBody);
+
+ return webpage.contains("The item/record was updated successfully");
}
+
//
//
diff --git a/src/main/java/com/omertron/themoviedbapi/tools/WebBrowser.java b/src/main/java/com/omertron/themoviedbapi/tools/WebBrowser.java
index 0f0cfa52f..6cfcd6508 100644
--- a/src/main/java/com/omertron/themoviedbapi/tools/WebBrowser.java
+++ b/src/main/java/com/omertron/themoviedbapi/tools/WebBrowser.java
@@ -20,10 +20,11 @@
package com.omertron.themoviedbapi.tools;
import com.omertron.themoviedbapi.MovieDbException;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StringWriter;
+import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
@@ -35,9 +36,6 @@ import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.commons.codec.binary.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Web browser with simple cookies support
@@ -68,6 +66,7 @@ public final class WebBrowser {
if (browserProperties.isEmpty()) {
browserProperties.put("User-Agent", "Mozilla/5.25 Netscape/5.0 (Windows; I; Win95)");
browserProperties.put("Accept", "application/json");
+ browserProperties.put("Content-type", "application/json");
}
}
@@ -100,6 +99,10 @@ public final class WebBrowser {
}
public static String request(URL url) throws MovieDbException {
+ return request(url, null);
+ }
+
+ public static String request(URL url, String jsonBody) throws MovieDbException {
StringWriter content = null;
try {
@@ -111,6 +114,14 @@ public final class WebBrowser {
cnx = openProxiedConnection(url);
sendHeader(cnx);
+
+ if (jsonBody != null) {
+ cnx.setDoOutput(true);
+ OutputStreamWriter wr = new OutputStreamWriter(cnx.getOutputStream());
+ wr.write(jsonBody);
+ wr.flush();
+ }
+
readHeader(cnx);
in = new BufferedReader(new InputStreamReader(cnx.getInputStream(), getCharset(cnx)));
diff --git a/src/test/java/com/omertron/themoviedbapi/TheMovieDbApiTest.java b/src/test/java/com/omertron/themoviedbapi/TheMovieDbApiTest.java
index bdbb531ca..3303700ea 100644
--- a/src/test/java/com/omertron/themoviedbapi/TheMovieDbApiTest.java
+++ b/src/test/java/com/omertron/themoviedbapi/TheMovieDbApiTest.java
@@ -19,39 +19,19 @@
*/
package com.omertron.themoviedbapi;
-import com.omertron.themoviedbapi.model.AlternativeTitle;
-import com.omertron.themoviedbapi.model.Artwork;
-import com.omertron.themoviedbapi.model.ChangedItem;
-import com.omertron.themoviedbapi.model.Collection;
-import com.omertron.themoviedbapi.model.CollectionInfo;
-import com.omertron.themoviedbapi.model.Company;
-import com.omertron.themoviedbapi.model.Discover;
-import com.omertron.themoviedbapi.model.Genre;
-import com.omertron.themoviedbapi.model.JobDepartment;
-import com.omertron.themoviedbapi.model.Keyword;
-import com.omertron.themoviedbapi.model.KeywordMovie;
-import com.omertron.themoviedbapi.model.MovieDb;
-import com.omertron.themoviedbapi.model.MovieDbList;
-import com.omertron.themoviedbapi.model.MovieList;
-import com.omertron.themoviedbapi.model.Person;
-import com.omertron.themoviedbapi.model.PersonCredit;
-import com.omertron.themoviedbapi.model.ReleaseInfo;
-import com.omertron.themoviedbapi.model.Reviews;
-import com.omertron.themoviedbapi.model.TmdbConfiguration;
-import com.omertron.themoviedbapi.model.TokenAuthorisation;
-import com.omertron.themoviedbapi.model.TokenSession;
-import com.omertron.themoviedbapi.model.Trailer;
-import com.omertron.themoviedbapi.model.Translation;
+import com.omertron.themoviedbapi.model.*;
import com.omertron.themoviedbapi.results.TmdbResultsList;
import com.omertron.themoviedbapi.results.TmdbResultsMap;
-import java.io.IOException;
-import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.junit.*;
-import static org.junit.Assert.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
/**
* Test cases for TheMovieDbApi API
*
@@ -78,6 +58,9 @@ public class TheMovieDbApiTest {
private static final String LANGUAGE_ENGLISH = "en";
private static final String LANGUAGE_RUSSIAN = "ru";
+ // session id of test users named 'apitests'
+ private static final String SESSION_ID_APITESTS = "63c85deb39337e29b69d78265eb28d639cbd6f72";
+
public TheMovieDbApiTest() throws MovieDbException {
}
@@ -613,16 +596,15 @@ public class TheMovieDbApiTest {
*
* TODO: Cannot be tested without a HTTP authorisation: http://help.themoviedb.org/kb/api/user-authentication
*/
- @Ignore("Not ready yet")
+ @Test
public void testPostMovieRating() throws Exception {
LOG.info("postMovieRating");
- String sessionId = "";
- String rating = "";
- boolean expResult = false;
- boolean result = tmdb.postMovieRating(sessionId, rating);
- assertEquals(expResult, result);
- // TODO review the generated test code and remove the default call to fail.
- fail("The test case is a prototype.");
+ Integer movieID = 68724;
+ Integer rating = 3;
+
+ boolean wasPosted = tmdb.postMovieRating(SESSION_ID_APITESTS, movieID, rating);
+
+ assertTrue(wasPosted);
}
/**