All files / publisher/release/api releases.js

86.36% Statements 19/22
100% Branches 6/6
80% Functions 12/15
86.36% Lines 19/22

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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108          5x     5x 5x 5x           5x       5x       5x                       5x                         5x           5x 3x     5x                         5x             5x 1x 1x     4x         1x                         1x          
import "whatwg-fetch";
 
import { DEFAULT_ERROR_MESSAGE as ERROR_MESSAGE } from "../constants";
 
export function fetchReleases(onComplete, releases, csrfToken, snapName) {
  let queue = Promise.resolve(); // Q() in q
 
  // handle releases as a queue
  releases.forEach((release) => {
    return (queue = queue.then(() => {
      return fetchRelease(
        csrfToken,
        snapName,
        release.id,
        release.channels,
        release.progressive,
      ).then((json) => onComplete(json, release));
    }));
  });
 
  return queue;
}
 
export function fetchReleasesHistory(csrfToken, snapName) {
  return fetch(`/${snapName}/releases/json`, {
    method: "GET",
    mode: "cors",
    cache: "no-cache",
    credentials: "same-origin",
    headers: {
      "Content-Type": "application/json; charset=utf-8",
      "X-CSRFToken": csrfToken,
    },
    redirect: "follow",
    referrer: "no-referrer",
  })
    .then((response) => response.json())
    .catch(() => {
      throw new Error(ERROR_MESSAGE);
    });
}
 
export function fetchRelease(
  csrfToken,
  snapName,
  revision,
  channels,
  progressive,
) {
  const body = {
    name: snapName,
    revision,
    channels,
  };
 
  if (progressive) {
    body.progressive = progressive;
  }
 
  return fetch(`/${snapName}/releases`, {
    method: "POST",
    mode: "cors",
    cache: "no-cache",
    credentials: "same-origin",
    headers: {
      "Content-Type": "application/json; charset=utf-8",
      "X-CSRFToken": csrfToken,
    },
    redirect: "follow",
    referrer: "no-referrer",
    body: JSON.stringify(body),
  })
    .then((response) => response.json())
    .catch(() => {
      throw new Error(ERROR_MESSAGE);
    });
}
 
export function fetchCloses(onComplete, csrfToken, snapName, channels) {
  if (channels && channels.length) {
    return fetchClose(csrfToken, snapName, channels).then((json) => {
      onComplete(json, channels);
    });
  } else {
    return Promise.resolve();
  }
}
 
export function fetchClose(csrfToken, snapName, channels) {
  return fetch(`/${snapName}/releases/close-channel`, {
    method: "POST",
    mode: "cors",
    cache: "no-cache",
    credentials: "same-origin",
    headers: {
      "Content-Type": "application/json; charset=utf-8",
      "X-CSRFToken": csrfToken,
    },
    redirect: "follow",
    referrer: "no-referrer",
    body: JSON.stringify({ channels }),
  })
    .then((response) => response.json())
    .catch(() => {
      throw new Error(ERROR_MESSAGE);
    });
}