All files saga.js

100% Statements 16/16
100% Branches 0/0
100% Functions 3/3
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                      2x 1x 1x       2x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x   1x         1x    
import { takeLatest, put, call } from 'redux-saga/effects';
import { valueOrDefault } from '@source4society/scepter-utility-lib';
import {
  sendRequestToS3 as defaultSendRequestToS3,
  getContentTypeFromExtension as defaultGetContentType,
  asyncFileReader as defaultAsyncFileReader,
} from '@source4society/scepter-aws-s3-utilities';
import { request } from '@source4society/scepter-ui-utilities';
import { UPLOAD_TO_S3 } from './constants';
import { s3UploadFailed, s3UploadSucceeded } from './action';
 
export const defaultRequestHandler = (url, options, injectedRequestHandler) => {
  const requestHandler = valueOrDefault(injectedRequestHandler, request);
  requestHandler(url, options, false); // Disable standard JSON parsing
};
 
export function* uploadToS3Saga(action, injectedSendRequestToS3, injectedGetContentType, injectedRequestHandler, injectedFileReader) {
  try {
    const sendRequestToS3 = valueOrDefault(injectedSendRequestToS3, defaultSendRequestToS3);
    const getContentTypeFromExtension = valueOrDefault(injectedGetContentType, defaultGetContentType);
    const asyncFileReader = valueOrDefault(injectedFileReader, defaultAsyncFileReader);
    const file = action.fileInput.files[0];
    const signedUrl = action.signedUrl;
    const contentType = getContentTypeFromExtension(action.fileInput.value);
    const requestHandler = valueOrDefault(injectedRequestHandler, defaultRequestHandler);
    const fileData = yield call(asyncFileReader, file);
    yield call(sendRequestToS3, requestHandler, fileData.target.result, signedUrl, contentType);
    yield put(s3UploadSucceeded(signedUrl, file, contentType));
  } catch (exception) {
    yield put(s3UploadFailed(exception));
  }
}
 
export default function* s3UploadButtonSagaListener() {
  yield takeLatest(UPLOAD_TO_S3, uploadToS3Saga);
}