Tests for viewsPerDay
authorRigel Kent <sendmemail@rigelk.eu>
Fri, 27 Mar 2020 21:26:39 +0000 (22:26 +0100)
committerChocobozzz <chocobozzz@cpy.re>
Tue, 31 Mar 2020 08:29:24 +0000 (10:29 +0200)
server/models/video/video-channel.ts
server/tests/api/videos/video-channels.ts
shared/extra-utils/videos/video-channels.ts

index 5e65418378273de992cec9029c1a7679eabd4877..78fc3d7e4810da3e1e87030258a5913f90b45345 100644 (file)
@@ -191,7 +191,7 @@ export type SummaryOptions = {
               'SELECT days.day AS day, ' +
                      'COALESCE(SUM(views.views), 0) AS views ' +
               'FROM days ' +
-              `LEFT JOIN views ON date_trunc('day', "views"."createdAt") = days.day ` +
+              `LEFT JOIN views ON date_trunc('day', "views"."startDate") = date_trunc('day', days.day) ` +
               'GROUP BY 1 ' +
               'ORDER BY day ' +
             ') t' +
index f3a23bf17127aa967ced09cbd9c10c58a53a22c6..bde45584d8bc6622fc6e7133310301fae03cfd6c 100644 (file)
@@ -2,7 +2,7 @@
 
 import * as chai from 'chai'
 import 'mocha'
-import { User, Video, VideoChannel, VideoDetails } from '../../../../shared/index'
+import { User, Video, VideoChannel, viewsPerTime, VideoDetails } from '../../../../shared/index'
 import {
   cleanupTests,
   createUser,
@@ -14,7 +14,8 @@ import {
   updateVideo,
   updateVideoChannelAvatar,
   uploadVideo,
-  userLogin
+  userLogin,
+  wait
 } from '../../../../shared/extra-utils'
 import {
   addVideoChannel,
@@ -25,7 +26,8 @@ import {
   getVideoChannelsList,
   ServerInfo,
   setAccessTokensToServers,
-  updateVideoChannel
+  updateVideoChannel,
+  viewVideo
 } from '../../../../shared/extra-utils/index'
 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
 
@@ -363,6 +365,42 @@ describe('Test video channels', function () {
     }
   })
 
+  it('Should report correct channel statistics', async function () {
+
+    {
+      const res = await getAccountVideoChannelsList({
+        url: servers[0].url,
+        accountName: userInfo.account.name + '@' + userInfo.account.host,
+        withStats: true
+      })
+      res.body.data.forEach((channel: VideoChannel) => {
+        expect(channel).to.haveOwnProperty('viewsPerDay')
+        expect(channel.viewsPerDay).to.have.length(30 + 1) // daysPrior + today
+        channel.viewsPerDay.forEach((v: viewsPerTime) => {
+          expect(v.date).to.be.an('string')
+          expect(v.views).to.equal(0)
+        })
+      })
+    }
+
+    {
+      // video has been posted on channel firstVideoChannelId since last update
+      await viewVideo(servers[0].url, videoUUID, 204, '0.0.0.1,127.0.0.1')
+      await viewVideo(servers[0].url, videoUUID, 204, '0.0.0.2,127.0.0.1')
+
+      // Wait the repeatable job
+      await wait(8000)
+
+      const res = await getAccountVideoChannelsList({
+        url: servers[0].url,
+        accountName: userInfo.account.name + '@' + userInfo.account.host,
+        withStats: true
+      })
+      const channelWithView = res.body.data.find((channel: VideoChannel) => channel.id === firstVideoChannelId)
+      expect(channelWithView.viewsPerDay.slice(-1)[0].views).to.equal(2)
+    }
+  })
+
   after(async function () {
     await cleanupTests(servers)
   })
index 51d433940daa45cd0970d9debcdf0a92ea272383..55f08b996e479fb46d9fd95b9bad5038e6d3de31 100644 (file)
@@ -8,7 +8,7 @@ import { ServerInfo } from '../server/servers'
 import { User } from '../../models/users/user.model'
 import { getMyUserInformation } from '../users/users'
 
-function getVideoChannelsList (url: string, start: number, count: number, sort?: string) {
+function getVideoChannelsList (url: string, start: number, count: number, sort?: string, withStats?: boolean) {
   const path = '/api/v1/video-channels'
 
   const req = request(url)
@@ -17,6 +17,7 @@ function getVideoChannelsList (url: string, start: number, count: number, sort?:
     .query({ count: count })
 
   if (sort) req.query({ sort })
+  if (withStats) req.query({ withStats })
 
   return req.set('Accept', 'application/json')
             .expect(200)
@@ -30,8 +31,9 @@ function getAccountVideoChannelsList (parameters: {
   count?: number
   sort?: string
   specialStatus?: number
+  withStats?: boolean
 }) {
-  const { url, accountName, start, count, sort = 'createdAt', specialStatus = 200 } = parameters
+  const { url, accountName, start, count, sort = 'createdAt', specialStatus = 200, withStats = false } = parameters
 
   const path = '/api/v1/accounts/' + accountName + '/video-channels'
 
@@ -41,7 +43,8 @@ function getAccountVideoChannelsList (parameters: {
     query: {
       start,
       count,
-      sort
+      sort,
+      withStats
     },
     statusCodeExpected: specialStatus
   })