From b8f6b27246edc0f1567614fb7fad9c6cab772a40 Mon Sep 17 00:00:00 2001
From: sknirmalkar89 <59080585+sknirmalkar89@users.noreply.github.com>
Date: Thu, 23 Sep 2021 13:52:22 +0530
Subject: [PATCH] SB-26876 Reverting back the notification feed (#953)

* SB-26876:Reverting notification feed code changes
---
 .../main/java/org/sunbird/keys/JsonKey.java   |   4 +-
 .../org/sunbird/actor/feed/UserFeedActor.java |  31 +++-
 .../actor/user/TenantMigrationActor.java      |   1 +
 .../sunbird/service/feed/IFeedService.java    |  11 +-
 .../service/feed/impl/FeedServiceImpl.java    | 148 ++++++------------
 .../java/org/sunbird/util/feed/FeedUtil.java  |  17 +-
 .../sunbird/actor/user/UserFeedActorTest.java |  53 ++-----
 .../feed/impl/FeedServiceImplTest.java        |  80 +++-------
 8 files changed, 123 insertions(+), 222 deletions(-)

diff --git a/core/platform-common/src/main/java/org/sunbird/keys/JsonKey.java b/core/platform-common/src/main/java/org/sunbird/keys/JsonKey.java
index 6072be732..a9d3a0c6a 100644
--- a/core/platform-common/src/main/java/org/sunbird/keys/JsonKey.java
+++ b/core/platform-common/src/main/java/org/sunbird/keys/JsonKey.java
@@ -502,7 +502,6 @@ public final class JsonKey {
   public static final String USER_FEED_DB = "user_feed";
   public static final String USER_FEED = "userFeed";
   public static final String FEED_DATA = "data";
-  public static final String FEEDS = "feeds";
   public static final String REJECT = "reject";
   public static final String FEED_ID = "feedId";
   public static final String LICENSE = "license";
@@ -641,8 +640,7 @@ public final class JsonKey {
   public static final String TENANT_PREFERENCE_V2_DB = "tenant_preference_v2";
   public static final String UPDATE_ORG_STATUS = "updateOrgStatus";
   public static final String SUNBIRD_WEB_URL = "sunbird_web_url";
-  public static final String IDS = "ids";
-  public static final String NOTIFICATIONS = "notifications";
+
 
     private JsonKey() {}
 }
diff --git a/service/src/main/java/org/sunbird/actor/feed/UserFeedActor.java b/service/src/main/java/org/sunbird/actor/feed/UserFeedActor.java
index 614c43662..05c098ce6 100644
--- a/service/src/main/java/org/sunbird/actor/feed/UserFeedActor.java
+++ b/service/src/main/java/org/sunbird/actor/feed/UserFeedActor.java
@@ -17,6 +17,7 @@ import org.sunbird.telemetry.dto.TelemetryEnvKey;
 import org.sunbird.util.ProjectUtil;
 import org.sunbird.util.Util;
 
+
 public class UserFeedActor extends BaseActor {
 
   IFeedService feedService = FeedFactory.getInstance();
@@ -59,15 +60,31 @@ public class UserFeedActor extends BaseActor {
   }
 
   private void createUserFeed(Request request, RequestContext context) {
-    request.getRequest().put(JsonKey.CREATED_BY,(String) request.getContext().get(JsonKey.REQUESTED_BY));
-    Response feedCreateResponse = feedService.insert(request, context);
+    Feed feed = mapper.convertValue(request.getRequest(), Feed.class);
+    feed.setStatus(FeedStatus.UNREAD.getfeedStatus());
+    feed.setCreatedBy((String) request.getContext().get(JsonKey.REQUESTED_BY));
+    Response feedCreateResponse = feedService.insert(feed, context);
     sender().tell(feedCreateResponse, self());
     // Delete the old user feed
+    Map<String, Object> reqMap = new WeakHashMap<>(2);
+    reqMap.put(JsonKey.USER_ID, feed.getUserId());
+    List<Feed> feedList = feedService.getFeedsByProperties(reqMap, context);
+    if (feedList.size() >= Integer.parseInt(ProjectUtil.getConfigValue(JsonKey.FEED_LIMIT))) {
+      feedList.sort(Comparator.comparing(Feed::getCreatedOn));
+      Feed delRecord = feedList.get(0);
+      feedService.delete(
+              delRecord.getId(), delRecord.getUserId(), delRecord.getCategory(), context);
+    }
   }
 
   private void deleteUserFeed(Request request, RequestContext context) {
     Response feedDeleteResponse = new Response();
-    feedService.delete(request,context);
+    Map<String, Object> deleteRequest = request.getRequest();
+    feedService.delete(
+            (String) deleteRequest.get(JsonKey.FEED_ID),
+            (String) deleteRequest.get(JsonKey.USER_ID),
+            (String) deleteRequest.get(JsonKey.CATEGORY),
+            context);
     feedDeleteResponse.getResult().put(JsonKey.RESPONSE, JsonKey.SUCCESS);
     sender().tell(feedDeleteResponse, self());
   }
@@ -75,9 +92,11 @@ public class UserFeedActor extends BaseActor {
   private void updateUserFeed(Request request, RequestContext context) {
     Map<String, Object> updateRequest = request.getRequest();
     String feedId = (String) updateRequest.get(JsonKey.FEED_ID);
-    updateRequest.put(JsonKey.IDS, Arrays.asList(feedId));
-    updateRequest.put(JsonKey.UPDATED_BY, request.getContext().get(JsonKey.REQUESTED_BY));
-    Response feedUpdateResponse = feedService.update(request, context);
+    Feed feed = mapper.convertValue(updateRequest, Feed.class);
+    feed.setId(feedId);
+    feed.setStatus(FeedStatus.READ.getfeedStatus());
+    feed.setUpdatedBy((String) request.getContext().get(JsonKey.REQUESTED_BY));
+    Response feedUpdateResponse = feedService.update(feed, context);
     sender().tell(feedUpdateResponse, self());
   }
 }
diff --git a/service/src/main/java/org/sunbird/actor/user/TenantMigrationActor.java b/service/src/main/java/org/sunbird/actor/user/TenantMigrationActor.java
index d31210de2..02062fd90 100644
--- a/service/src/main/java/org/sunbird/actor/user/TenantMigrationActor.java
+++ b/service/src/main/java/org/sunbird/actor/user/TenantMigrationActor.java
@@ -337,4 +337,5 @@ public class TenantMigrationActor extends BaseActor {
     }
     return userRequest;
   }
+
 }
diff --git a/service/src/main/java/org/sunbird/service/feed/IFeedService.java b/service/src/main/java/org/sunbird/service/feed/IFeedService.java
index 1aab537aa..4dc8fbcb3 100644
--- a/service/src/main/java/org/sunbird/service/feed/IFeedService.java
+++ b/service/src/main/java/org/sunbird/service/feed/IFeedService.java
@@ -3,7 +3,6 @@ package org.sunbird.service.feed;
 import java.util.List;
 import java.util.Map;
 import org.sunbird.model.user.Feed;
-import org.sunbird.request.Request;
 import org.sunbird.request.RequestContext;
 import org.sunbird.response.Response;
 
@@ -14,21 +13,21 @@ public interface IFeedService {
    * this method will be responsible to insert the feed in the user_feed table and sync the data
    * with the ES
    *
-   * @param request
+   * @param feed
    * @param context
    * @return response
    */
-  Response insert(Request request, RequestContext context);
+  Response insert(Feed feed, RequestContext context);
 
   /**
    * this method will be responsible to update the feed in the user_feed table and sync the data
    * with the ES
    *
-   * @param request
+   * @param feed
    * @param context
    * @return response
    */
-  Response update(Request request, RequestContext context);
+  Response update(Feed feed, RequestContext context);
 
   /**
    * this method will be responsible to get the records by userId from the user_feed table
@@ -45,5 +44,5 @@ public interface IFeedService {
    * @param request
    * @param context
    */
-  Response delete(Request request, RequestContext context);
+  void delete(String id, String userId, String action, RequestContext context);
 }
diff --git a/service/src/main/java/org/sunbird/service/feed/impl/FeedServiceImpl.java b/service/src/main/java/org/sunbird/service/feed/impl/FeedServiceImpl.java
index bd901f9e6..a1f68ddaf 100644
--- a/service/src/main/java/org/sunbird/service/feed/impl/FeedServiceImpl.java
+++ b/service/src/main/java/org/sunbird/service/feed/impl/FeedServiceImpl.java
@@ -2,11 +2,12 @@ package org.sunbird.service.feed.impl;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.sql.Timestamp;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
@@ -15,16 +16,13 @@ import org.sunbird.dao.feed.IFeedDao;
 import org.sunbird.dao.feed.impl.FeedDaoImpl;
 import org.sunbird.exception.ProjectCommonException;
 import org.sunbird.exception.ResponseCode;
-import org.sunbird.http.HttpClientUtil;
 import org.sunbird.keys.JsonKey;
 import org.sunbird.logging.LoggerUtil;
 import org.sunbird.model.user.Feed;
-import org.sunbird.request.Request;
 import org.sunbird.request.RequestContext;
 import org.sunbird.response.Response;
 import org.sunbird.service.feed.IFeedService;
 import org.sunbird.util.ProjectUtil;
-import com.fasterxml.jackson.core.JsonProcessingException;
 
 public class FeedServiceImpl implements IFeedService {
   private static LoggerUtil logger = new LoggerUtil(FeedServiceImpl.class);
@@ -32,127 +30,79 @@ public class FeedServiceImpl implements IFeedService {
   private ObjectMapper mapper = new ObjectMapper();
 
   @Override
-  public Response insert(Request request, RequestContext context) {
+  public Response insert(Feed feed, RequestContext context) {
     logger.debug(context, "FeedServiceImpl:insert method called : ");
-    String notification_service_base_url = System.getenv("notification_service_base_url");
-    String NOTIFICATION_SERVICE_URL = notification_service_base_url + "/private/v2/notification/send";
-    logger.debug(
-            context,
-            "FeedServiceImpl:insert :: calling notification service URL :"
-                    + NOTIFICATION_SERVICE_URL);
-    Response response = new Response();
-    Request req = new Request();
-    Map<String,Object> reqObj = new HashMap<>();
-    reqObj.put(JsonKey.NOTIFICATIONS,Arrays.asList(request.getRequest()));
-    req.setRequest(reqObj);
+    Map<String, Object> dbMap = mapper.convertValue(feed, Map.class);
+    String feedId = ProjectUtil.generateUniqueId();
+    dbMap.put(JsonKey.ID, feedId);
+    dbMap.put(JsonKey.CREATED_ON, new Timestamp(Calendar.getInstance().getTimeInMillis()));
     try {
-      String json = mapper.writeValueAsString(req);
-      json = new String(json.getBytes(), StandardCharsets.UTF_8);
-      Map<String, String> headers = new HashMap<>();
-      headers.put("Accept", "application/json");
-      headers.put("Content-type", "application/json");
-      headers.put("requestId", request.getRequestId());
-
-      ProjectUtil.setTraceIdInHeader(headers, context);
-      String responseStr = HttpClientUtil.post(NOTIFICATION_SERVICE_URL, json, headers, context);
-      logger.info(
-                context,
-                "FeedServiceImpl:insert :: Response =" + response);
-        response = mapper.readValue(responseStr, Response.class);
+      if (MapUtils.isNotEmpty(feed.getData())) {
+        dbMap.put(JsonKey.FEED_DATA, mapper.writeValueAsString(feed.getData()));
+      }
     } catch (Exception ex){
       logger.error(context, "FeedServiceImpl:insert Exception occurred while mapping.", ex);
       ProjectCommonException.throwServerErrorException(ResponseCode.SERVER_ERROR);
     }
-    return response;
+    return iFeedDao.insert(dbMap, context);
   }
 
   @Override
-  public Response update(Request request, RequestContext context) {
+  public Response update(Feed feed, RequestContext context) {
     logger.debug(context, "FeedServiceImpl:update method called : ");
+    Map<String, Object> dbMap = mapper.convertValue(feed, Map.class);
     String notification_service_base_url = System.getenv("notification_service_base_url");
     String NOTIFICATION_SERVICE_URL = notification_service_base_url + "/private/v1/notification/feed/update";
     Response response = new Response();
     try {
-      String json = mapper.writeValueAsString(request);
-      json = new String(json.getBytes(), StandardCharsets.UTF_8);
-      Map<String, String> headers = new HashMap<>();
-      headers.put("Accept", "application/json");
-      headers.put("Content-type", "application/json");
-      headers.put("requestId", request.getRequestId());
-
-      ProjectUtil.setTraceIdInHeader(headers, context);
-      String responseStr = HttpClientUtil.patch(NOTIFICATION_SERVICE_URL, json, headers, context);
-      logger.info(
-              context,
-              "FeedServiceImpl:insert :: Response =" + response);
-      response = mapper.readValue(responseStr, Response.class);
+      if (MapUtils.isNotEmpty(feed.getData())) {
+        dbMap.put(JsonKey.FEED_DATA, mapper.writeValueAsString(feed.getData()));
+      }
     } catch (Exception ex) {
       logger.error(context, "FeedServiceImpl:update Exception occurred while mapping.", ex);
       ProjectCommonException.throwServerErrorException(ResponseCode.SERVER_ERROR);
     }
-    return response;
+    dbMap.remove(JsonKey.CREATED_ON);
+    dbMap.put(JsonKey.UPDATED_ON, new Timestamp(Calendar.getInstance().getTimeInMillis()));
+    return iFeedDao.update(dbMap, context);
   }
 
   @Override
   public List<Feed> getFeedsByProperties(Map<String, Object> properties, RequestContext context) {
     logger.debug(context, "FeedServiceImpl:getFeedsByUserId method called : ");
-    String notification_service_base_url = System.getenv("notification_service_base_url");
-    String NOTIFICATION_SERVICE_URL = notification_service_base_url + "/private/v1/notification/feed/read/"+properties.get(JsonKey.USER_ID);
-    logger.debug(
-            context,
-            "FeedServiceImpl:insert :: calling notification service URL :"
-                    + NOTIFICATION_SERVICE_URL);
-    Map<String, String> headers = new HashMap<>();
-    headers.put("Accept", "application/json");
-    headers.put("Content-type", "application/json");
+    Response dbResponse = iFeedDao.getFeedsByProperties(properties, context);
+    List<Map<String, Object>> responseList = null;
     List<Feed> feedList = new ArrayList<>();
-    try {
-      ProjectUtil.setTraceIdInHeader(headers, context);
-      String response = HttpClientUtil.get(NOTIFICATION_SERVICE_URL,headers, context);
-      logger.info(
-              context,
-              "FeedServiceImpl:callNotificationService :: Response =" + response);
-      if (!StringUtils.isBlank(response)) {
-         Response notificationRes = mapper.readValue(response, Response.class);
-         List<Map<String, Object>> feeds = (List<Map<String, Object>>)notificationRes.getResult().get(JsonKey.FEEDS);
-        if (CollectionUtils.isNotEmpty(feeds)) {
-          for (Map<String,Object> feed:feeds) {
-            feedList.add(mapper.convertValue(feed, Feed.class));
-          }
-        }
+    if (null != dbResponse && null != dbResponse.getResult()) {
+      responseList = (List<Map<String, Object>>) dbResponse.getResult().get(JsonKey.RESPONSE);
+      if (CollectionUtils.isNotEmpty(responseList)) {
+        responseList.forEach(
+                s -> {
+                  try {
+                    String data = (String) s.get(JsonKey.FEED_DATA);
+                    if (StringUtils.isNotBlank(data)) {
+                      s.put(
+                              JsonKey.FEED_DATA,
+                              mapper.readValue(data, new TypeReference<Map<String, Object>>() {}));
+                    } else {
+                      s.put(JsonKey.FEED_DATA, Collections.emptyMap());
+                    }
+                    feedList.add(mapper.convertValue(s, Feed.class));
+                  } catch (Exception ex) {
+                    logger.error(
+                            context,
+                            "FeedServiceImpl:getRecordsByUserId :Exception occurred while mapping feed data.",
+                            ex);
+                  } });
       }
-    } catch (Exception ex) {
-      logger.error(context, "FeedServiceImpl:read Exception occurred while mapping.", ex);
-      ProjectCommonException.throwServerErrorException(ResponseCode.SERVER_ERROR);
     }
     return feedList;
   }
 
   @Override
-  public Response delete(Request request, RequestContext context) {
-    String notification_service_base_url = System.getenv("notification_service_base_url");
-    String NOTIFICATION_SERVICE_URL = notification_service_base_url + "/private/v1/notification/feed/delete";
-    Response response = new Response();
-    request.getRequest().put(JsonKey.IDS,Arrays.asList(request.getRequest().get(JsonKey.FEED_ID)));
-    try {
-      String json = mapper.writeValueAsString(request);
-      json = new String(json.getBytes(), StandardCharsets.UTF_8);
-      Map<String, String> headers = new HashMap<>();
-      headers.put("Accept", "application/json");
-      headers.put("Content-type", "application/json");
-      headers.put("requestId", request.getRequestId());
-
-      ProjectUtil.setTraceIdInHeader(headers, context);
-      String responseStr = HttpClientUtil.post(NOTIFICATION_SERVICE_URL, json, headers, context);
-      logger.info(
-              context,
-              "FeedServiceImpl:insert :: Response =" + response);
-      response = mapper.readValue(responseStr, Response.class);
-
-    } catch (Exception ex) {
-      logger.error(context, "FeedServiceImpl:read Exception occurred while mapping.", ex);
-      ProjectCommonException.throwServerErrorException(ResponseCode.SERVER_ERROR);
-    }
-    return response;
+  public void delete(String id, String userId, String category, RequestContext context) {
+    logger.debug(
+            context, "FeedServiceImpl:delete method called for feedId : " + id + "user-id:" + userId);
+    iFeedDao.delete(id, userId, category, context);
   }
 }
diff --git a/service/src/main/java/org/sunbird/util/feed/FeedUtil.java b/service/src/main/java/org/sunbird/util/feed/FeedUtil.java
index 8735cafe1..0a0054868 100644
--- a/service/src/main/java/org/sunbird/util/feed/FeedUtil.java
+++ b/service/src/main/java/org/sunbird/util/feed/FeedUtil.java
@@ -7,10 +7,10 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.stream.IntStream;
+import org.apache.commons.lang3.StringUtils;
 import org.sunbird.client.org.OrganisationClient;
 import org.sunbird.client.org.impl.OrganisationClientImpl;
 import org.sunbird.model.ShadowUser;
-import org.sunbird.request.Request;
 import org.sunbird.service.feed.IFeedService;
 import org.sunbird.service.feed.FeedFactory;
 import org.sunbird.keys.JsonKey;
@@ -21,8 +21,6 @@ import org.sunbird.model.user.FeedAction;
 import org.sunbird.model.user.FeedStatus;
 import org.sunbird.request.RequestContext;
 import org.sunbird.response.Response;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.commons.lang3.StringUtils;
 
 /** this class will be used as a Util for inserting Feed in table */
 public class FeedUtil {
@@ -62,18 +60,12 @@ public class FeedUtil {
             (ArrayList<Map<String, String>>) data.get(JsonKey.PROSPECT_CHANNELS_IDS);
         orgList.addAll(getOrgDetails(shadowUser.getChannel(), context));
       }
-      Request request = new Request();
-      ObjectMapper mapper = new ObjectMapper();
-      request.setRequest(mapper.convertValue(feedList.get(index),Map.class));
-      response = feedService.update(request, context);
-
+      response = feedService.update(feedList.get(index), context);
     }
     return response;
   }
 
-  private static Request createFeedObj(ShadowUser shadowUser, String userId, RequestContext context) {
-    Request request = new Request();
-    ObjectMapper mapper = new ObjectMapper();
+  private static Feed createFeedObj(ShadowUser shadowUser, String userId, RequestContext context){
     Feed feed = new Feed();
     feed.setPriority(1);
     feed.setCreatedBy(shadowUser.getAddedBy());
@@ -87,8 +79,7 @@ public class FeedUtil {
         JsonKey.PROSPECT_CHANNELS_IDS, getOrgDetails(shadowUser.getChannel(), context));
     feed.setData(prospectsChannel);
     feed.setUserId(userId);
-    request.setRequest(mapper.convertValue(feed,Map.class));
-    return request;
+    return feed;
   }
 
   private static List<Map<String, String>> getOrgDetails(String channel, RequestContext context) {
diff --git a/service/src/test/java/org/sunbird/actor/user/UserFeedActorTest.java b/service/src/test/java/org/sunbird/actor/user/UserFeedActorTest.java
index 5a6cb6280..ff8b1f0b3 100644
--- a/service/src/test/java/org/sunbird/actor/user/UserFeedActorTest.java
+++ b/service/src/test/java/org/sunbird/actor/user/UserFeedActorTest.java
@@ -3,14 +3,13 @@ package org.sunbird.actor.user;
 import static akka.testkit.JavaTestKit.duration;
 import static org.junit.Assert.assertTrue;
 import static org.powermock.api.mockito.PowerMockito.mock;
-import static org.junit.Assert.assertFalse;
 import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.actor.Props;
 import akka.testkit.javadsl.TestKit;
-
-import java.util.*;
-
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -28,11 +27,9 @@ import org.sunbird.common.Constants;
 import org.sunbird.exception.ProjectCommonException;
 import org.sunbird.exception.ResponseCode;
 import org.sunbird.helper.ServiceFactory;
-import org.sunbird.http.HttpClientUtil;
 import org.sunbird.keys.JsonKey;
 import org.sunbird.operations.ActorOperations;
 import org.sunbird.request.Request;
-import org.sunbird.request.RequestContext;
 import org.sunbird.response.Response;
 import org.sunbird.service.feed.IFeedService;
 import org.sunbird.service.feed.impl.FeedServiceImpl;
@@ -46,8 +43,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
   CassandraOperationImpl.class,
   IFeedService.class,
   FeedServiceImpl.class,
-  org.sunbird.datasecurity.impl.ServiceFactory.class,
-  HttpClientUtil.class
+  org.sunbird.datasecurity.impl.ServiceFactory.class
 })
 @SuppressStaticInitializationFor("org.sunbird.common.ElasticSearchUtil")
 @PowerMockIgnore({
@@ -65,7 +61,7 @@ public class UserFeedActorTest {
   private static CassandraOperation cassandraOperation = null;
 
   @Before
-  public void setUp() throws JsonProcessingException{
+  public void setUp(){
     PowerMockito.mockStatic(ServiceFactory.class);
     userFeed.put(JsonKey.ID, "123-456-789");
     response = new Response();
@@ -79,17 +75,18 @@ public class UserFeedActorTest {
     Map<String, Object> responseMap2 = new HashMap<>();
     responseMap2.put(Constants.RESPONSE, Constants.SUCCESS);
     upsertResponse.getResult().putAll(responseMap2);
-    ObjectMapper Obj = new ObjectMapper();
-    String jsonStr = Obj.writeValueAsString(upsertResponse);
-    PowerMockito.mockStatic(HttpClientUtil.class);
-    PowerMockito.when(HttpClientUtil.post(Mockito.anyString(),Mockito.anyString(),Mockito.anyMap(),Mockito.any())).thenReturn(jsonStr);
-    PowerMockito.when(HttpClientUtil.patch(Mockito.anyString(),Mockito.anyString(),Mockito.anyMap(),Mockito.any())).thenReturn(jsonStr);
-    PowerMockito.when(HttpClientUtil.get(Mockito.anyString(),Mockito.anyMap(),Mockito.any())).thenReturn(getUserFeedData());
-
+    PowerMockito.when(
+            cassandraOperation.insertRecord(
+                    Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
+            .thenReturn(upsertResponse);
+    PowerMockito.when(
+            cassandraOperation.updateRecord(
+                    Mockito.any(), Mockito.any(), Mockito.anyMap(), Mockito.anyMap(), Mockito.any()))
+            .thenReturn(upsertResponse);
   }
 
   @Test
-  public void getUserFeedTest() throws JsonProcessingException{
+  public void getUserFeedTest() {
     TestKit probe = new TestKit(system);
     ActorRef subject = system.actorOf(props);
     Request reqObj = new Request();
@@ -97,7 +94,7 @@ public class UserFeedActorTest {
     reqObj.setOperation(ActorOperations.GET_USER_FEED_BY_ID.getValue());
     reqObj.put(JsonKey.USER_ID, "123-456-789");
     subject.tell(reqObj, probe.getRef());
-    Response res = probe.expectMsgClass(duration("30 second"), Response.class);
+    Response res = probe.expectMsgClass(duration("10 second"), Response.class);
     Assert.assertTrue(null != res && res.getResponseCode() == ResponseCode.OK);
   }
 
@@ -143,7 +140,6 @@ public class UserFeedActorTest {
   }
 
   public boolean testScenario(Request reqObj, ResponseCode errorCode) {
-
     TestKit probe = new TestKit(system);
     ActorRef subject = system.actorOf(props);
     subject.tell(reqObj, probe.getRef());
@@ -159,23 +155,4 @@ public class UserFeedActorTest {
     }
   }
 
-
-  public String getUserFeedData () {
-    Response response = new Response();
-    Map<String,Object> result = new HashMap<>();
-    List<Map<String,Object>> feeds = new ArrayList<>();
-    Map<String,Object> feed = new HashMap<>();
-    feed.put(JsonKey.ID,"12312312");
-    feeds.add(feed);
-    result.put(JsonKey.FEEDS,feeds);
-    response.putAll(result);
-    ObjectMapper Obj = new ObjectMapper();
-    String jsonStr=null;
-    try {
-     jsonStr = Obj.writeValueAsString(response);
-    }catch (Exception e){
-      assertFalse(false);
-    }
-    return jsonStr;
-  }
 }
diff --git a/service/src/test/java/org/sunbird/service/feed/impl/FeedServiceImplTest.java b/service/src/test/java/org/sunbird/service/feed/impl/FeedServiceImplTest.java
index 276bb4886..f23e922e9 100644
--- a/service/src/test/java/org/sunbird/service/feed/impl/FeedServiceImplTest.java
+++ b/service/src/test/java/org/sunbird/service/feed/impl/FeedServiceImplTest.java
@@ -11,7 +11,6 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.powermock.api.mockito.PowerMockito;
-import static org.junit.Assert.assertFalse;
 import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
@@ -20,16 +19,11 @@ import org.sunbird.common.Constants;
 import org.sunbird.dao.feed.IFeedDao;
 import org.sunbird.dao.feed.impl.FeedDaoImpl;
 import org.sunbird.helper.ServiceFactory;
-import org.sunbird.http.HttpClientUtil;
 import org.sunbird.keys.JsonKey;
 import org.sunbird.model.user.Feed;
-import org.sunbird.request.Request;
 import org.sunbird.response.Response;
 import org.sunbird.service.feed.FeedFactory;
 import org.sunbird.service.feed.IFeedService;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.core.JsonProcessingException;
 
 
 @RunWith(PowerMockRunner.class)
@@ -37,9 +31,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
   ServiceFactory.class,
   CassandraOperationImpl.class,
   FeedDaoImpl.class,
-  IFeedDao.class,
-  HttpClientUtil.class
-
+  IFeedDao.class
 })
 @PowerMockIgnore({
   "javax.management.*",
@@ -52,7 +44,7 @@ public class FeedServiceImplTest {
   private static IFeedService feedService;
 
   @Before
-  public void setUp() throws JsonProcessingException{
+  public void setUp(){
     PowerMockito.mockStatic(FeedDaoImpl.class);
     IFeedDao iFeedDao = PowerMockito.mock(FeedDaoImpl.class);
     PowerMockito.when(FeedDaoImpl.getInstance()).thenReturn(iFeedDao);
@@ -64,13 +56,13 @@ public class FeedServiceImplTest {
     Map<String, Object> responseMap = new HashMap<>();
     responseMap.put(Constants.RESPONSE, Arrays.asList(getFeedMap()));
     response.getResult().putAll(responseMap);
-    ObjectMapper Obj = new ObjectMapper();
-    String jsonStr = Obj.writeValueAsString(upsertResponse);
-    PowerMockito.mockStatic(HttpClientUtil.class);
-    PowerMockito.when(HttpClientUtil.post(Mockito.anyString(),Mockito.anyString(),Mockito.anyMap(),Mockito.any())).thenReturn(jsonStr);
-    PowerMockito.when(HttpClientUtil.patch(Mockito.anyString(),Mockito.anyString(),Mockito.anyMap(),Mockito.any())).thenReturn(jsonStr);
-    PowerMockito.when(HttpClientUtil.get(Mockito.anyString(),Mockito.anyMap(),Mockito.any())).thenReturn(getUserFeedData());
-
+    PowerMockito.when(iFeedDao.insert(Mockito.anyMap(), Mockito.any())).thenReturn(upsertResponse);
+    PowerMockito.when(iFeedDao.update(Mockito.anyMap(), Mockito.any())).thenReturn(upsertResponse);
+    PowerMockito.doNothing()
+            .when(iFeedDao)
+            .delete(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any());
+    PowerMockito.when(iFeedDao.getFeedsByProperties(Mockito.anyMap(), Mockito.any()))
+            .thenReturn(response);
     feedService = FeedFactory.getInstance();
   }
 
@@ -83,11 +75,22 @@ public class FeedServiceImplTest {
 
   @Test
   public void testUpdate() {
-    Response res = feedService.update(getFeedUpdate(true), null);
+    Response res = feedService.update(getFeed(true), null);
     Assert.assertTrue(
         ((String) res.getResult().get(JsonKey.RESPONSE)).equalsIgnoreCase(JsonKey.SUCCESS));
   }
 
+  @Test
+  public void testDelete() {
+    boolean response = false;
+    try {
+      feedService.delete("123-456-789", null, null, null);
+      response = true;
+    } catch (Exception ex) {
+      Assert.assertTrue(response);
+    }
+    Assert.assertTrue(response);
+  }
 
   @Test
   public void testGetRecordsByProperties() {
@@ -105,8 +108,7 @@ public class FeedServiceImplTest {
     return fMap;
   }
 
-  private Request getFeed(boolean needId) {
-    Request request = new Request();
+  private Feed getFeed(boolean needId) {
     Feed feed = new Feed();
     feed.setUserId("123-456-7890");
     feed.setCategory("category");
@@ -118,43 +120,7 @@ public class FeedServiceImplTest {
     channelList.add("SI");
     map.put(JsonKey.PROSPECT_CHANNELS, channelList);
     feed.setData(map);
-    request.setRequest(new ObjectMapper().convertValue(feed,Map.class));
-    return request;
+    return feed;
   }
 
-  private Request getFeedUpdate(boolean needId) {
-    Request request = new Request();
-    Feed feed = new Feed();
-    feed.setUserId("123-456-7890");
-    feed.setCategory("category");
-    if (needId) {
-      feed.setId("123-456-789");
-    }
-    Map<String, Object> map = new HashMap<>();
-    List<String> channelList = new ArrayList<>();
-    channelList.add("SI");
-    map.put(JsonKey.PROSPECT_CHANNELS, channelList);
-    feed.setData(map);
-    request.setRequest(new ObjectMapper().convertValue(feed,Map.class));
-    return request;
-  }
-
-  public String getUserFeedData () {
-    Response response = new Response();
-    Map<String,Object> result = new HashMap<>();
-    List<Map<String,Object>> feeds = new ArrayList<>();
-    Map<String,Object> feed = new HashMap<>();
-    feed.put(JsonKey.ID,"12312312");
-    feeds.add(feed);
-    result.put(JsonKey.FEEDS,feeds);
-    response.putAll(result);
-    ObjectMapper Obj = new ObjectMapper();
-    String jsonStr=null;
-    try {
-      jsonStr = Obj.writeValueAsString(response);
-    }catch (Exception e){
-      assertFalse(false);
-    }
-    return jsonStr;
-  }
 }
-- 
GitLab