/**
 * Created by Gideon on 9/23/15.
 */
import com.mongodb.BasicDBObject;
import com.mongodb.MongoWriteException;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import edu.columbia.main.db.Models.Tweet;
import edu.columbia.main.db.MongoDB;
import junit.framework.Assert;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.net.UnknownHostException;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static com.mongodb.client.model.Filters.*;


public class TestTweets {


        MongoDatabase  testDb;
        MongoCollection tweets;
        @Before
        public void setUp() throws UnknownHostException {
            testDb = MongoDB.INSTANCE.getDatabase("test");
            tweets = testDb.getCollection("tweets",BasicDBObject.class);

        }

        @Test
        public void insertTweetToDataBase() {
            String data = "Исламын бүлэглэлүүд нь Узбек, Тажик, Киргиз улсыг хамарсан Ферганын хөндийд байрлаж байна";
            String url = "http://twitter.com/sukhee56/status/640834315731910656";
            Tweet tweet = new Tweet(data,data,"tst","sukhee56",null,"topsy",url,"640834315731910656","filename");
            tweets.insertOne(tweet);
            BasicDBObject obj = (BasicDBObject) tweets.find(eq("data", data)).first();
            Tweet tweet2 = new Tweet(obj);
            assertNotNull(tweet.equals(tweet2));
        }

        @Test(expected = MongoWriteException.class)
        public void noDuplicatesAllowed() {
                String data = "this is a tweet !";
                String url = "http://www.columbia.edu";
                Tweet tweet = new Tweet(data,data,"tst","test",null,"topsy",url,"123456","filename");
                tweets.insertOne(tweet);
                String data2 = "this is a tweet !";
                String url2 = "http://www.columbia.edu";
                Tweet tweet2 = new Tweet(data2,data,"tst","test",null,"topsy",url2,"123456","filename");
                tweets.insertOne(tweet2);
            }
        @Test
        public void deleteFromDB() {
            String data = "test blablabla";
            String url = "http://twitter.com/sukhee56/status/640834315731910656";
            Tweet tweet = new Tweet(data,data,"tst","sukhee56",null,"topsy",url,"640834315731910656","filename");

            //add and check that it was added
            tweets.insertOne(tweet);
            BasicDBObject obj = (BasicDBObject) tweets.find(eq("data", data)).first();
            Tweet tweet2 = new Tweet(obj);
            assertNotNull(tweet.equals(tweet2));

            //delete
            obj = (BasicDBObject) tweets.find(eq("data", data)).first();
            tweets.deleteOne(eq("data", data));

            //try to fetch again
            obj = (BasicDBObject) tweets.find(eq("data", data)).first();
            assertNull(obj);



        }

        @After
        public void tearDown(){
            tweets.drop();
        }

    }