def post(self, request: Request) -> Response: active = get_active_record() if active is None: return Response(status=status.HTTP_403_FORBIDDEN) serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) if active.project != serializer.validated_data["project"]: log.warning( "project from request %s does not match active project %s", serializer.validated_data["project"], active.project, ) return Response(status=status.HTTP_403_FORBIDDEN) record = update_record( record=active, project=active.project, start_time=active.start_time, stop_time=serializer.validated_data["stop_time"], ) return Response(self.OutputSerializer(record).data, status=status.HTTP_200_OK)
def update(self, instance, validated_data): record = update_record( record=instance, project=validated_data["project"], start_time=validated_data["start_time"], stop_time=validated_data.get("stop_time"), ) return record
def test_update_record_remove_stop_time(): record = factories.RecordFactory() result = update_record( record=record, project=record.project, start_time=record.start_time, stop_time=None, ) assert result.stop_time_epoch is None
def test_update_record_stop_time(): record = factories.RecordFactory() new_stop_time = record.stop_time + timedelta(hours=1) result = update_record( record=record, project=record.project, start_time=record.start_time, stop_time=new_stop_time, ) assert result.stop_time_epoch == datetime.timestamp(new_stop_time)
def test_update_record_project(): project = factories.ProjectFactory() record = factories.RecordFactory(project=project) new_project = factories.ProjectFactory() result = update_record( record=record, project=new_project, start_time=record.start_time, stop_time=record.stop_time, ) assert result.project == new_project