package dk.dr.radio.data;
import android.os.Build;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import dk.dr.radio.diverse.App;
import dk.dr.radio.diverse.FilCache;
import dk.dr.radio.diverse.Log;
import dk.dr.radio.net.Diverse;
import dk.dr.radio.v3.BuildConfig;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, application = AfproevBackend.TestApp.class)
public class AfproevBackend {
static String hentStreng(String url) throws IOException {
//String data = Diverse.læsStreng(new FileInputStream(FilCache.hentFil(url, false, true, 1000 * 60 * 60 * 24 * 7)));
url = url.replaceAll("Ø", "%C3%98");
url = url.replaceAll("Å", "%C3%85");
String fil = FilCache.hentFil(url, false, true, 12 * 1000 * 60 * 60);
Log.d(url + " -> "+fil);
String data = Diverse.læsStreng(new FileInputStream(fil));
Log.d(data);
return data;
}
public static class TestApp extends App {
static {
IKKE_Android_VM = true;
}
@Override
public void onCreate() {
Log.d("onCreate " + Build.PRODUCT + Build.MODEL);
FilCache.init(new File("/tmp/drradio-cache"));
Log.d("arbejdsmappe = " + new File(".").getAbsolutePath());
DRBackendTidsformater.servertidsformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); // +01:00 springes over da kolon i +01:00 er ikke-standard Java
super.onCreate();
}
}
@Test
public void tjekUdelukFraHLS() throws Exception {
DRData i = DRData.instans;
i.grunddata.android_json.put("udeluk_HLS2", "C6603 .*/18, IdeaPadA10 A10/17, LIFETAB_E7312 LIFETAB_E7310/17, LIFETAB_E10310/.*");
i.grunddata.udelukHLS = false;
i.grunddata.tjekUdelukFraHLS("C6603 C6603/18");
if (i.grunddata.udelukHLS != true) throw new Exception();
i.grunddata.tjekUdelukFraHLS("C6603 C6603/17");
if (i.grunddata.udelukHLS == true) throw new Exception();
i.grunddata.tjekUdelukFraHLS("IdeaPadA10 A10/17");
if (i.grunddata.udelukHLS != true) throw new Exception();
i.grunddata.tjekUdelukFraHLS("IdeaPadA10 A10/23");
if (i.grunddata.udelukHLS == true) throw new Exception();
i.grunddata.tjekUdelukFraHLS("IdeaPadA10 A11/17");
if (i.grunddata.udelukHLS == true) throw new Exception();
i.grunddata.tjekUdelukFraHLS("LIFETAB_E10310/16");
if (i.grunddata.udelukHLS != true) throw new Exception();
}
@Test
public void tjek_hent_a_til_å() throws Exception {
System.out.println("tjek_hent_a_til_å");
DRData.instans.programserierAtilÅ.parseSvar(hentStreng(DRData.getAtilÅUrl()));
assertTrue(DRData.instans.programserierAtilÅ.liste.size()>0);
int samletAntalUdsendelser = 0;
// Tjek kun nummer 50 til nummer 100
for (Programserie ps : DRData.instans.programserierAtilÅ.liste.subList(50, 150)) {
String url = DRData.getProgramserieUrl(ps, ps.slug) + "&offset=" + 0;
JSONObject data = new JSONObject(hentStreng(url));
ps = DRJson.parsProgramserie(data, ps);
DRData.instans.programserieFraSlug.put(ps.slug, ps);
JSONArray prg = data.getJSONArray(DRJson.Programs.name());
ArrayList<Udsendelse> udsendelser = DRJson.parseUdsendelserForProgramserie(prg, null, DRData.instans);
System.out.println(ps.slug + " " + ps.antalUdsendelser + " " + udsendelser.size());
assertTrue(ps.slug + " har færre udsendelser end påstået:\n"+url, ps.antalUdsendelser>= udsendelser.size());
samletAntalUdsendelser += udsendelser.size();
}
assertTrue("Kun "+samletAntalUdsendelser+" udsendelser!", samletAntalUdsendelser>100);
}
@Test
public void tjek_hent_podcast() throws Exception {
System.out.println("tjek_hent_podcast");
DRData.instans.dramaOgBog.parseSvar(hentStreng(DRData.instans.dramaOgBog.url));
// assertThat(i.dramaOgBog.karusel, hasSize(greaterThan(0)));
assertNotSame(new ArrayList<Udsendelse>(), DRData.instans.dramaOgBog.karusel);
int sektionsnummer = 0;
for (ArrayList<Programserie> sektion : DRData.instans.dramaOgBog.lister) {
assertTrue(DRData.instans.dramaOgBog.overskrifter.get(sektionsnummer)+" er tom", !sektion.isEmpty());
int n = 0;
for (Programserie ps : sektion) {
assertTrue(ps+" har ingen udsendelser", ps.antalUdsendelser>0);
if (n++ > 3) break; // Tjek kun de første 3.
String url = DRData.getProgramserieUrl(ps, ps.slug) + "&offset=" + 0;
JSONObject data = new JSONObject(hentStreng(url));
ps = DRJson.parsProgramserie(data, ps);
DRData.instans.programserieFraSlug.put(ps.slug, ps);
JSONArray prg = data.getJSONArray(DRJson.Programs.name());
ArrayList<Udsendelse> udsendelser = DRJson.parseUdsendelserForProgramserie(prg, null, DRData.instans);
System.out.println(ps.slug + " " + ps.antalUdsendelser + " " + udsendelser.size());
assertTrue(ps.slug + " har færre udsendelser end påstået:\n"+url, ps.antalUdsendelser>= udsendelser.size());
int m = 0;
for (Udsendelse u : udsendelser) {
if (m++ > 5) break; // Tjek kun de første 5.
u.setStreams(new JSONObject(hentStreng(u.getStreamsUrl())));
assertTrue(u+" kan ikke høres ", u.kanHentes);
}
}
sektionsnummer++;
}
System.out.println("tjek_hent_podcast slut");
}
@Test
public void tjekDirekteUdsendelser() throws Exception {
for (Kanal k : DRData.instans.grunddata.kanaler) {
if (k.kode.equals("P4F")) continue;
String url = k.getStreamsUrl();
String data = hentStreng(url);
JSONObject o = new JSONObject(data);
k.setStreams(o);
assertTrue(k.findBedsteStreams(false).size() > 0);
}
//Log.d("DRData.instans.grunddata.kanalFraSlug=" + DRData.instans.grunddata.kanalFraSlug);
//assertTrue(Robolectric.setupActivity(Hovedaktivitet.class) != null);
}
@Test
public void tjekAktuelleUdsendelser() throws Exception {
System.out.println("tjekAktuelleUdsendelser");
DRData i = DRData.instans;// = new DRData();
//i.grunddata = new Grunddata();
//i.grunddata.parseFællesGrunddata(Diverse.læsStreng(new FileInputStream("src/main/res/raw/grunddata.json")));
//hentSupplerendeData(i.grunddata);
//System.exit(0);
for (Kanal kanal : i.grunddata.kanaler) {
Log.d("\n\n===========================================\n\nkanal = " + kanal);
if (Kanal.P4kode.equals(kanal.kode)) continue;
if ("DRN".equals(kanal.kode)) continue; // ikke DR Nyheder
String datoStr = DRJson.apiDatoFormat.format(new Date());
kanal.setUdsendelserForDag(DRJson.parseUdsendelserForKanal(new JSONArray(
hentStreng(DRData.getKanalUdsendelserUrlFraKode(kanal.kode, datoStr))), kanal, new Date(), DRData.instans), "0");
int antalUdsendelser = 0;
int antalUdsendelserMedPlaylister = 0;
int antalUdsendelserMedLydstreams = 0;
for (Udsendelse u : kanal.udsendelser) {
Log.d("\nudsendelse = " + u);
antalUdsendelser++;
JSONObject obj = new JSONObject(hentStreng(u.getStreamsUrl()));
//Log.d(obj.toString(2));
boolean MANGLER_SeriesSlug = !obj.has(DRJson.SeriesSlug.name());
u.setStreams(obj);
if (!u.kanHøres) Log.d("Ingen lydstreams!!");
else antalUdsendelserMedLydstreams++;
u.playliste = DRJson.parsePlayliste(new JSONArray(hentStreng(DRData.getPlaylisteUrl(u))));
if (u.playliste.size() > 0) {
antalUdsendelserMedPlaylister++;
Log.d("u.playliste= " + u.playliste);
}
boolean gavNull = false;
Programserie ps = i.programserieFraSlug.get(u.programserieSlug);
if (ps == null) try {
String str = hentStreng(DRData.getProgramserieUrl(null, u.programserieSlug));
if ("null".equals(str)) gavNull = true;
else {
JSONObject data = new JSONObject(str);
ps = DRJson.parsProgramserie(data, null);
JSONArray prg = data.getJSONArray(DRJson.Programs.name());
ArrayList<Udsendelse> udsendelser = DRJson.parseUdsendelserForProgramserie(prg, kanal, DRData.instans);
ps.tilføjUdsendelser(0, udsendelser);
i.programserieFraSlug.put(u.programserieSlug, ps);
}
} catch (Exception e) {
e.printStackTrace();
}
if (MANGLER_SeriesSlug)
Log.d("MANGLER_SeriesSlug " + u + " gavNull=" + gavNull + " fra dagsprogram =" + u.programserieSlug);
}
assertTrue("Kun " + antalUdsendelserMedLydstreams + " ud af " + antalUdsendelser + " udsendelser kan høres på " + kanal,
antalUdsendelserMedLydstreams * 10 > antalUdsendelser);
if (!"P1D".contains(kanal.navn)) {
assertTrue("Kun " + antalUdsendelserMedPlaylister + " ud af " + antalUdsendelser + " udsendelser har playlister på " + kanal,
antalUdsendelserMedPlaylister * 10 > antalUdsendelser);
}
}
}
}